在我的测试类的设置中,我为用户创建了一个模拟对象。当模拟创建时,它会执行以下操作:
$other = $this->getMock( 'Other' );
$user->expects( $this->any() )
->method( '_getOtherInstance' )
->will( $this->returnValue( $other ) );
现在在删除用户时,它会调用_getOtherInstance
来删除第三级信息。
当我在我的测试课中运行删除时#39;在tearDown
之前parent::tearDown
,_getOtherInstance
会返回null
。
我知道模拟设置正确,因为在delete
中运行setUp
有效。
这里有什么关于tearDown的特别之处?我会想象PHPUnit会取消所有模拟和它们返回的内容,但是在我用parent::tearDown
调用链之前不会。
答案 0 :(得分:0)
setUp
中的tearDown
和TestCase
都是空的,您不需要在测试中打扰它们。它们是您单独使用的模板方法。这同样适用于静态版本。
调用上述方法的方法是runBare
,并且在调用verifyMockObjects
之前调用tearDown
。此方法在每个模拟上调用__phpunit_verify
,然后验证期望,然后删除:
public function __phpunit_verify() {
$this->__phpunit_getInvocationMocker()->verify();
$this->__phpunit_invocationMocker = NULL;
}
将模拟对象转储到tearDown
中,表明包含期望的调用模拟器已设置为null
,使其无法用于tearDown
方法。
危险:如果您确实必须达到预期效果,您可以在测试用例中覆盖
verifyMockObjects
,因为它是受保护的方法。抓住你需要的东西,然后调用父方法。请记住,您在PHPUnit内部进行了非常频繁的更改。