phpunit 學習

ohguy發表於2020-03-14

單元測試是一個強大的功能,之前一直不會今日學習了一下,由於還在學習可能還存在問題。

首先,需要先進行phpuit的安裝,正常情況下安裝好laravel之後是已經安裝該擴充套件。

phpunit安裝

composer require --dev phpunit/phpunit

這樣就安裝好測試擴充套件了

測試程式碼的生成

在test資料夾下面包含了兩個檔案Feature和Unit,這兩個資料夾有什麼區別呢?Feature更多的是對整個物件或者完整的一個http請求進行測試,而Unit更多是對單個方法進行測試。

// 在 Feature 目錄下建立一個使用者介面的測試類...
php artisan make:test UserApiTest

測試內容的編寫

建立好之後進行相關程式碼的編寫,我是對使用者資料獲取的介面進行測試

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
use App\Models\User;

class UserApiTest extends TestCase
{
    use RefreshDatabase;

    protected $user;

    protected function setUp(): void
    {
        parent::setUp();
        $this->createUser();
    }

    /**
     * A basic feature test example.
     *
     * @return void
     */
    public function testExample()
    {
        $token = $this->user->createNewToken();
        $response = $this->withHeaders(['Authorization' => 'Bearer '.$token])->get('/api/user');

        $response->assertStatus(200);
    }

    public function createUser()
    {
        $user = factory(User::class)->create();
        $this->user = $user;
    }
}

createNewToken就是生成當前使用者token,具體方法按照各自的邏輯編寫即可

程式碼流程:

  1. 我先生成了一條使用者資料。
  2. 然後拿生成的使用者進行token的換取。
  3. 最後將token附加到http請求的header頭中。

測試方案

我的phpunit在vender/bin/phpunit之中

//1、使用此命令會對所有測試案列進行測試
./vendor/bin/phpunit
//2、使用此命令會只對UserApiTest類中的方法進行測試
./vendor/bin/phpunit /var/www/project/tests/Feature/UserApiTest.php
//3、使用此命令會只對UserApiTest類中的testExample方法進行測試
./vendor/bin/phpunit --filter testExample  /var/www/project/tests/Feature/UserApiTest.php

錯誤解決

發現有報錯

Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1 no such table: users (SQL: select * from "users" where "users"."id" = 2 limit 1)

後來發現需要使用use RefreshDatabase引入這個trait就可以了,主要是重新整理一下資料表

測試結果

phpunit 學習

終於測試成功了。

單元測試是一個很強大的功能,當你為自己的專案編寫單元測試,之後進行程式碼修改或新增時候就可以使用一條命令可以看出當前程式碼是否存在問題,同時還可以看出對之前編寫的程式碼是否產生影響,從而可以保證給你的前端小夥伴的介面可靠性。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章