在我的 phpunit 測試中,我需要為每個測試分別運行清理功能,例如:use PHPUnit\Framework\TestCase;use MyApp\Database\DatabaseEntryDataGenerator;use MyApp\Database\Record\User;use MyApp\Database\Record\Emails;class MyEmailTest extends TestCase{ public function testEmailValid() { /** * @var EmailEntries */ $emails=DatabaseEntryDataGenerator::table(EmailEntries::TABLE)->generate(); //Do test $emails->delete(); } public function testEmailValidOnUser() { /** * @var User */ $user=DatabaseEntryDataGenerator::table(User::TABLE)->generateSingle(1); /** * @var EmailEntries */ $emails=DatabaseEntryDataGenerator::table(EmailEntries::TABLE)->generateMultiple(); //Do test $emails->delete(); $user->delete(); }}假設虛構DatabaseEntryDataGenerator在數據庫上生成數據,虛構EmailEntries代表User記錄數據。和delete上的方法。EmailEntriesUser但是,如果在測試開發過程中出現一些 brak mucase 刪除,即清理代碼可能會被刪除。此外,通用tearDown是通用的方式,不允許指定特定方法來測試所需的拆卸邏輯。例如,在我的例子中,testEmailValidid Different on 上的拆卸邏輯testEmailValidOnUser,如果由于打字錯誤而損壞,可能最終無法運行它,因此不會給我測試隔離。那么,無論測試成功與否,我如何才能擁有將執行的每個測試特定的拆卸邏輯?
2 回答

料青山看我應如是
TA貢獻1772條經驗 獲得超8個贊
唯一的方法是使用單獨的類。如果每個測試都需要不同的拆卸邏輯,那么您要么遇到架構問題,要么正在測試不同的功能,要么就是沒有足夠好的拆卸策略。
通常,在拆卸邏輯期間,簡單的截斷邏輯就足夠了。

桃花長相依
TA貢獻1860條經驗 獲得超8個贊
我建議在這里使用數據庫事務。你真的想在兩個測試中做同樣的事情:回滾對數據庫所做的任何更改。
public function setUp(): void
{
MyDatabaseClass:startTransaction();
}
public function tearDown(): void
{
MyDatabaseClass:rollback();
}
這樣您就不需要為每個測試都設置特殊的邏輯,而且如果您影響的表比預期的多,您仍然是安全的。
- 2 回答
- 0 關注
- 104 瀏覽
添加回答
舉報
0/150
提交
取消