在 Laravel 5.7 使用 PHPUnit 進行單元測試

做法

新增測試。

1
php artisan make:test UserTest

修改 phpunit.xml 檔,使用 SQLite 作為測試環境的記憶體資料庫。

1
2
3
4
5
6
7
8
9
10
<php>
<env name="APP_ENV" value="testing"/>
<env name="BCRYPT_ROUNDS" value="4"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="MAIL_DRIVER" value="array"/>
<env name="QUEUE_CONNECTION" value="sync"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
</php>

在測試類別加上 RefreshDatabase 特徵機制,以重置資料庫:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;

class ExampleTest extends TestCase
{
use RefreshDatabase;

/**
* A basic test example.
*
* @return void
*/
public function testBasicExample()
{
$response = $this->get('/');

//
}
}

tests/TestCase.php 檔,使用 setUp() 方法作為建構子,使用 tearDown() 方法作為解構子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
namespace Tests;

use Illuminate\Foundation\Testing\TestCase as BaseTestCase;

abstract class TestCase extends BaseTestCase
{
use CreatesApplication;

protected function setUp()
{
parent::setUp();

//
}

protected function tearDown()
{
parent::tearDown();

//
}
}

執行測試。

1
phpunit