2010-08-20 85 views
0

在我的代码中有一些奇怪的事情,所以我不得不问。UnitTests失败,手动测试通过

我有一个测试的一部分:

public function testGetAddresses() 
{ 
    //$this->markTestIncomplete('Not implemented yet'); 
    $this->assertTrue($this->_prs->getAddresses() instanceof Crm_Collection); 
} 

此测试失败。

但是,当我这样做:

if ($entity->getAddresses() instanceof Crm_Collection) { 
    echo "TRUE!"; 
} else { 
    echo "FALSE!"; 
} 

它输出TRUE!

任何人都知道发生了什么,或者这可能是phpunit中的错误?

谢谢!

+1

'$ entity'和'$ this->之间可能有区别吗? _prs'这有助于解决问题? – ircmaxell 2010-08-20 13:03:56

+0

对不起,我看到了,我对于stackoverflow有点新。我今晚或星期一做那件事。谢谢 – baklap 2010-08-20 13:41:36

+0

您的意见表明问题已解决,请选择最能帮助您的答案并接受它(也许可以提供有用的东西来感谢人们)。它有助于其他人不会浪费时间解决已经解决的问题。 – edorian 2010-08-20 14:01:30

回答

1

为什么vadimbelyaev说:

我不认为这是使用PHPUnit的问题,仔细检查您的代码。

此外,您可以使用:

$this->assertType("Classname", $object) 

,所以你得到一个不错的错误的情况下失败。 (Phpunit会告诉你“预期的类,得到空”,而不是“预期真实,得到错误”,在调试时帮助很多:))

+0

你说得对,它返回null。让我们看看为什么。 愚蠢的我。 – baklap 2010-08-20 13:38:05

+0

不时发生在每个人身上。很高兴我们可以帮你解决这个问题:) – edorian 2010-08-20 13:53:55

2

我怀疑这是一个PHPUnit的错误。 既然你在两个不同的对象上调用getAddresses()方法,我猜测在失败的测试中,这个方法确实返回了不是Crm_Collection的东西。

getAddresses()方法是否有可能返回null或抛出异常?

+0

它不能返回null,它只是返回一个空的集合。 所有其他测试运行良好。有两个类从实体继承。这是相同的类btw,手动测试只是一个手动设置变量。 – baklap 2010-08-20 13:22:43

0

其他测试好吗?你是否从浏览器运行测试?

当您从命令行运行PHP代码时,我强烈建议设置一个正确的路径到php.ini。否则PHP将使用默认值,这可能与您当前的php.ini不同。

不知道这是否能解决您的问题,但知道的很好。一旦我花了几个小时才发现这一点。

php -c "c:/program files/apache software foundation/Apache2.2/" -f /path/to/your/script.php

+0

我运行我的测试与巡航控制结合phpUnderControl,其他1000个测试运行良好。只是这两个给我一个错误。 – baklap 2010-08-20 13:23:25

+0

即使在Netbeans中,当我在本地进行测试时,它也能正常工作。也许它与数据库有关。我将我的本地数据库转储到我的CI服务器。怪事。 – baklap 2010-08-20 13:33:13