为了账号安全,请及时绑定邮箱和手机立即绑定

我如何在每个 phpunit 测试特定的拆卸逻辑?

我如何在每个 phpunit 测试特定的拆卸逻辑?

PHP
天涯尽头无女友 2022-12-03 10:25:34
在我的 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个赞

唯一的方法是使用单独的类。如果每个测试都需要不同的拆卸逻辑,那么您要么遇到架构问题,要么正在测试不同的功能,要么就是没有足够好的拆卸策略。

通常,在拆卸逻辑期间,简单的截断逻辑就足够了。


查看完整回答
反对 回复 2022-12-03
?
桃花长相依

TA贡献1860条经验 获得超8个赞

我建议在这里使用数据库事务。你真的想在两个测试中做同样的事情:回滚对数据库所做的任何更改。


public function setUp(): void

{

    MyDatabaseClass:startTransaction();

}


public function tearDown(): void

{

    MyDatabaseClass:rollback();

}

这样您就不需要为每个测试都设置特殊的逻辑,而且如果您影响的表比预期的多,您仍然是安全的。


查看完整回答
反对 回复 2022-12-03
  • 2 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信