【发布时间】:2020-04-02 12:29:35
【问题描述】:
在我的 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 上的方法 EmailEntries 和 User。
但是,如果在测试开发过程中出现某些问题,那么作为清理代码的删除可能会被删除。此外,泛型tearDown 是泛型方法,不允许指定特定方法来指示测试所需的拆解逻辑。例如,在我的情况下,testEmailValid 上的拆解逻辑在testEmailValidOnUser 上的 id 不同,如果由于拼写错误而出现问题,最终可能无法运行它,因此不会给我测试隔离。
那么,无论测试是否成功,我如何才能让每个测试特定的拆解逻辑都将被执行?
【问题讨论】: