在我的测试类的设置中,我为用户创建了一个模拟对象。当模拟被创建时,它会做这样的事情:

$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 调用链之前不会。

最佳答案

setUptearDownTestCase 中都是空的,您无需费心从测试中调用它们。它们是供您单独使用的模板方法。这同样适用于静态版本。

调用上面和你的测试方法的方法是 runBare ,它在调用 verifyMockObjects 之前调用 tearDown 。此方法在每个模拟上调用 __phpunit_verify ,这反过来验证期望,然后删除它们:

public function __phpunit_verify() {
    $this->__phpunit_getInvocationMocker()->verify();
    $this->__phpunit_invocationMocker = NULL;
}

tearDown 中转储模拟对象表明包含期望的调用模拟程序已设置为 null ,使它们对您的 tearDown 方法不可用。

10-08 08:00