【发布时间】:2020-01-25 22:31:07
【问题描述】:
我有代码。
try {
$this->entityManager->beginTransaction();
$this->repo->remove($something);
$this->repoTwo->delete($something);
$this->entityManager->commit();
} catch (Exception $e) {
$this->entityManager->rollback();
throw new Exception($e->getMessage(), 0, $e);
}
现在,我想测试一下,如果数据库中仍有记录,发生异常后,我该怎么做,如果在预期异常后测试无法工作?
$this->expectException(Exception::class);
$this->expectExceptionMessage('xxxx');
app(Command::class)->handle();
$this->seeInDatabase($table, [
'id' => $media->id(),
]);
我该怎么做?谢谢。
【问题讨论】:
-
你不需要检查这个。你的类应该模拟所有依赖项,所以你可以检查
rollback是否被调用。 -
@freeek 但是,如果我尝试模拟 entityManager 并尝试检查是否调用了回滚,无论如何我应该这样做,在我调用我的函数之后,但在
pp(MediaCleanupCommand::class)->handle();之后没有任何效果(也是 die() ;), -
是的,但是你应该在
handle()之前模拟,这样就可以了。之后不需要任何代码。 -
@freeek 谢谢,像这样工作,有没有机会,我可以测试,数据库上的记录真的存在吗?
-
从我的角度来看,单元测试不需要这个。如果您要对其进行端到端测试,那将是有道理的。您检查您的方法是否按设计执行:因此事务被回滚。
标签: php exception transactions phpunit