在我的 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 关注
- 83 浏览
添加回答
举报
0/150
提交
取消