简答:
对于长时间运行的测试,请使用注释来增加允许的运行时间:
@large // 10 seconds
@medium // 5 seconds
@small // 1 second max <-- Default, so no point using
长答案:
这是在@Crozin 的帮助下获得的一组更新信息。
在我的情况下,错误是测试花费的时间太长(>1 秒。)(Doctrine ORM 模式 drop + create 会减慢速度,see this ZendCast for what I was doing)。这导致 PHP_Invoker 出现问题(和一些输出)。严格模式不允许任何输出。
通过阅读/逆向工程 /usr/share/php/pear/share/pear/PHPUnit/Util/Test.php::getSize() (和 getGroups() 在同一个类)..我发现有我们可以使用 3 个未记录的注释:
@large // 10 seconds
@medium // 5 seconds
@small // 1 second max run time
它们可以在类级别或方法级别上指定。
Issue #490 on the PHPUnit github 暗示了提供类级别和方法级别的问题,因此如果您混合使用它们,则为 YMMV。正如 crozin 所说,分配的超时时间分别为 10、5、1 秒。
另一种解决方案是增加被调用函数的运行时间(在我的慢速计算机上)。
sudo vi /usr/share/php/pear/share/pear/PHP/Invoker.php
Increase line 1 "declare(ticks = 1);" to
"declare(ticks = 10);" // or any higher int that meets your needs
这里有一堆关于严格模式的信息,帮助我找到了解决方案:
PHP_Invoker
用于调用具有超时的可调用对象的实用程序类。这个包是在严格模式下强制测试超时所必需的。 [PHPUnit Install Instructions]
严格模式
不断言任何内容的测试被标记为不完整
不完整(或跳过)的测试不会产生代码覆盖Slideshare by Sebastian Bergmann (slide 10)
注意
请注意,PHPUnit 会吞下测试执行期间发出的所有输出。在严格模式下,发出输出的测试将失败。 Testing output section of PHPUnit Manual