理論上,各個 test case 不應該互相影響,所以 PHPUnit 設計的 fixtures 像是 setUp() 和 tearDown() 都會在各個 test case 前後執行。
簡單做個測試:
<?php
use PHPUnitFrameworkTestCase;
class LibTest extends TestCase
{
public function setUp(): void
{
$this->data = null;
}
public function tearDown(): void
{
$this->data = null;
}
public function testOne()
{
$this->data = 123;
$this->assertEquals(123, $this->data);
return $this->data;
}
/**
* @depends testOne
*/
public function testTwo($data)
{
$this->assertEquals(123, $this->data);
}
}
// -----
PHPUnit 8.2.3 by Sebastian Bergmann and contributors.
.F
即使在 test case 加上 @depends 標記,fixture 也會運作,所以若是要讓下一個 test case 繼續使用的測試值,都必須用 return 的方式傳值。
—-
另外,Laravel 提供的 testing tools 也有相同的行為。例如:「RefreshDatabase」,在 test case 執行結束以後就會把資料清空,因此如果要對 DB 做多像檢查,就必須在同一個 test case 中建立多個 assertions (個人不喜歡這樣做),不然即使加上 @depends,DB 中的資料也會被 refresh 掉。