PHPUnit严格模式的作用是什么?

PHPUnit严格模式的作用是什么?,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,我想知道PHPUnit中的“严格模式”是什么 例如: 或者在phpunit.xml中 <phpunit strict="true"/> 请注意,PHPUnit会吞噬测试执行期间发出的所有输出。在严格模式下,发出输出的测试将失败 这就是我在文档中所能找到的,但我也检查了源代码,发现在严格模式下: 没有断言的测试可能被标记为不完整/失败 每个测试的运行时间可能有限制,具体取决于它的大小和和和的存在。有三个超时值: timeoutForSmallTests(默认值:1) timeout

我想知道PHPUnit中的“严格模式”是什么

例如:

或者在phpunit.xml中

<phpunit strict="true"/>
请注意,PHPUnit会吞噬测试执行期间发出的所有输出。在严格模式下,发出输出的测试将失败

这就是我在文档中所能找到的,但我也检查了源代码,发现在严格模式下:

  • 没有断言的测试可能被标记为不完整/失败
  • 每个测试的运行时间可能有限制,具体取决于它的大小和和和的存在。有三个超时值:

    • timeoutForSmallTests
      (默认值:1)
    • timeoutForMediumTests
      (默认值:10)
    • timeoutForLargeTests
      (默认值:60)
    测试大小(小、中或大)由
    PHPUnit\u Util\u test::getSize()
    方法确定:

    • PHPUnit\u Extensions\u Database\u TestCase
      PHPUnit\u Extensions\u SeleniumTestCase
      下降的测试用例很大
    • 通过将测试用例和单个测试分别添加到“大”或“中”,也可以使它们成为大测试或中测试
    • 否则,测试很小


  • 严格模式似乎只做了上述三个改变,但我不是绝对肯定。我以前从未研究过PHPUnit的来源,也没有使用严格模式。

    简短回答: 对于长时间运行的测试,请使用注释来增加允许的运行时间:

    @large // 10 seconds
    @medium // 5 seconds
    @small // 1 second max <-- Default, so no point using
    
    可以在类级别或方法级别指定它们。 提示同时提供类级和方法级的问题,以便混合使用。正如crozin所说,分配的超时时间分别为10、5、1秒

    另一种解决方案是增加被调用函数的运行时间(在我速度较慢的计算机上)

    下面是一组关于strict mode的信息,它们帮助我找到了解决方案:

    PHP_调用程序
    用于调用具有超时的可调用项的实用程序类。在严格模式下强制执行测试超时需要此包。[]

    严格模式 不断言任何内容的测试被标记为未完成 不完整(或跳过)的测试不会产生代码覆盖率


    请注意,PHPUnit会吞噬测试执行期间发出的所有输出。在严格模式下,发出输出的测试将失败


    更改phpunit.xml文件中测试的允许时间,如下所述
    PHP_Invoker_TimeoutException: Execution aborted after 1 second
    
    @large // 10 seconds
    @medium // 5 seconds
    @small // 1 second max <-- Default, so no point using
    
    @large  // 10 seconds
    @medium // 5 seconds
    @small // 1 second max run time
    
    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