在我的测试类的设置中,我为用户创建了一个模拟对象。当模拟被创建时,它会做这样的事情:
$other = $this->getMock( 'Other' );
$user->expects( $this->any() )
->method( '_getOtherInstance' )
->will( $this->returnValue( $other ) );
现在在删除用户时,调用
_getOtherInstance
来删除三级信息。当我在测试类的
tearDown
中运行 delete 时,在 parent::tearDown
之前, _getOtherInstance
返回 null
。我知道模拟设置正确,因为在
delete
中运行 setUp
有效。这里的tearDown有什么特别之处?我想 PHPUnit 会取消设置所有模拟和它们返回的内容,但在我使用
parent::tearDown
调用链之前不会。 最佳答案
setUp
和 tearDown
在 TestCase
中都是空的,您无需费心从测试中调用它们。它们是供您单独使用的模板方法。这同样适用于静态版本。
调用上面和你的测试方法的方法是 runBare
,它在调用 verifyMockObjects
之前调用 tearDown
。此方法在每个模拟上调用 __phpunit_verify
,这反过来验证期望,然后删除它们:
public function __phpunit_verify() {
$this->__phpunit_getInvocationMocker()->verify();
$this->__phpunit_invocationMocker = NULL;
}
在
tearDown
中转储模拟对象表明包含期望的调用模拟程序已设置为 null
,使它们对您的 tearDown
方法不可用。