2

我正在使用 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
4

1 回答 1

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)。

您可以扩展 PHPUnit 框架并添加此功能。

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

另一种选择是扩展类似于本文PHPUnit_TextUI_ResultPrinter中的 HTML Result Printer 的类。

如果您想在不扩展 PHPUnit 的情况下发送整个输出的电子邮件,您可以通过管道将结果发送到电子邮件应用程序

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

笔记

我正在使用 3.3.17

于 2013-07-12T14:39:34.417 回答