phpunit方法getNumAssertions返回0

时间:2013-07-12 14:26:11

标签: php phpunit

我正在使用PHPUNIT 3.4.5,我想得到我的测试完成的断言总数(我的示例代码有3个断言)。 “getNumAssertions”方法一直返回0。

    public function test_DateUtil()
{
    echo "\nNumAssertions : " . $this->getNumAssertions() . "\n";
    $this->assertEquals(1, 1);
    echo "NumAssertions : " . $this->getNumAssertions() . "\n";
}

public function test_DateUtil_2()
{
    echo "\nNumAssertions : " . $this->getNumAssertions() . "\n";
    $this->assertEquals(1, 1);
    $this->assertEquals(1, 1);
    echo "NumAssertions : " . $this->getNumAssertions() . "\n";
}

}

PHPUnit返回:

phpunit --configuration phpunit_dev.xml --verbose
PHPUnit 3.4.5 by Sebastian Bergmann.
UtilTest
NumAssertions : 0
NumAssertions : 0
.
NumAssertions : 0
NumAssertions : 0
.
Time: 1 second, Memory: 13.50Mb
OK (2 tests, 3 assertions)  ------------> what i want to get

1 个答案:

答案 0 :(得分:0)

您应该使用PHPUnit_Framework_Assert::getCount()

public function test_DateUtil()
{
    echo "\nNumAssertions : " . PHPUnit_Framework_Assert::getCount() . "\n";
    $this->assertEquals(1, 1);
    echo "NumAssertions : " . PHPUnit_Framework_Assert::getCount() . "\n";
}

您的代码未生成预期的输出,因为方法PHPUnit_Framework_TestCase::addToAssertionCount在测试本身之外被调用,并且在测试完成之前不会调用它。

因此,您将无法使用getNumAssertions()从测试方法中获取断言计数。

您将找到对

的调用

$test->addToAssertionCount(PHPUnit_Framework_Assert::getCount());

接近方法结束

PHPUnit_Framework_TestResult::run

<强> 修改

运行所有测试后的输出由PHPUnit_TextUI_ResultPrinter完成,其中包含protected属性$numAssertions。此属性没有访问者(getter)。

您可以extend the PHPUnit framework添加此功能。

一种选择是扩展PHPUnit_Framework_TestCase类,重载run方法并从那里增加自定义total assertions计数器。

另一种选择是扩展PHPUnit_TextUI_ResultPrinter类,类似于this article中的HTML结果打印机。

如果您想在不扩展PHPUnit的情况下发送整个输出的电子邮件,您可以pipe the results to an email application

还有jenkins,它可以处理这个以及更多。

<强>

我正在使用3.3.17