Mik*_*raf 36 php phpunit unit-testing
我想知道什么是"PHPUnit中的严格模式"?
例如:
phpunit --strict
Run Code Online (Sandbox Code Playgroud)
或者在phpunit.xml中
<phpunit strict="true"/>
Run Code Online (Sandbox Code Playgroud)
我打开它只是为了尝试它,我的测试开始失败了
PHP_Invoker_TimeoutException: Execution aborted after 1 second
Run Code Online (Sandbox Code Playgroud)
Cro*_*zin 34
请注意,PHPUnit会吞下执行测试期间发出的所有输出.在严格模式下,发出输出的测试将失败.
这就是我在文档中找到的所有内容,但我也查看了源代码,我发现在严格模式下:
每个测试可能会按照执行时间限制运行,具体取决于它的大小以及pcntl扩展和PHP_Invoker库的存在.有三个超时值:
timeoutForSmallTests (默认值:1)timeoutForMediumTests (默认值:10)timeoutForLargeTests (默认值:60)测试大小(小,中或大)由以下PHPUnit_Util_Test::getSize()方法确定:
PHPUnit_Extensions_Database_TestCase或PHPUnit_Extensions_SeleniumTestCase大.严格模式似乎只做了以上三个变化,但我并不完全确定.我以前从未研究过PHPUnit的源代码,也没有使用过严格模式.
Mik*_*raf 21
简短回答: 对于长时间运行的测试,使用注释来增加允许的运行时间:
@large // 10 seconds
@medium // 5 seconds
@small // 1 second max <-- Default, so no point using
Run Code Online (Sandbox Code Playgroud)
答案很长:
以下是在@Crozin的帮助下派生的一组更新信息.
在我的情况下,错误是测试花了太长时间(> 1秒.)(Doctrine ORM架构丢弃+创建可以减慢速度,看看ZendCast我正在做什么).这导致了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
Run Code Online (Sandbox Code Playgroud)
可以在类级别或方法级别指定它们. 关于PHPUnit github的问题#490暗示了提供类级别和方法级别的问题,如果你混合使用YMMV.正如克罗辛所说,分配的时间分别为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
Run Code Online (Sandbox Code Playgroud)
以下是一些有关严格模式的信息,可帮助我找到解决方案:
PHP_Invoker
用于调用超时的callables的实用程序类.此程序包需要在严格模式下强制执行测试超时.[ PHPUnit安装说明 ]严格模式测试不断言任何东西被标记为不完整测试不完整(或跳过)不产生代码覆盖率Slideshare by Sebastian Bergmann(幻灯片10)
注意
请注意,PHPUnit会吞下执行测试期间发出的所有输出.在严格模式下,发出输出的测试将失败.测试PHPUnit手册的输出部分
| 归档时间: |
|
| 查看次数: |
7554 次 |
| 最近记录: |