有风险的测试

6 有风险的测试

无用测试

什么叫无用测试呢?未进行任何断言的测试方法,就叫做无用测试。本来PHPUnit不会对这些测试进行限制,但是可以使用开启一些配置,将这些测试方法标记为有风险的。

  • 命令行参数:--report-useless-tests
  • PHPUnit的XML配置文件中设置:beStrictAboutTestsThatDoNotTestAnything="true"

意外的代码覆盖

@covers@uses

在测试代码中用 @covers 标注来指明测试方法想要对哪些方法进行测试

标注方法暂时不在这一章里面详细介绍。

@uses 标注用来指明那些将会在测试中执行到但同时又不打算让其被测试所覆盖的代码。

这里实在没有找到对应的例子,可能是因为我半路跳过去的吧。所以以下就是我的猜想了,@uses应该是标注了该测试中会用到的类,但是后面那句**“但同时又不打算让其被测试所覆盖的代码”,我就不知道怎么理解"覆盖"**,这个词的含义了,所以先空着吧。

PHPUnit 可以更严格对待意外的代码覆盖。此项检查可以用命令行选项 --strict-coverage 或在 PHPUnit 的 XML 配置文件中设置 beStrictAboutCoversAnnotation="true" 来启用。

在启用本项检查后,如果某个带有 @covers 标注的测试执行了未在 @covers 或 @uses 标注中列出的代码,它将被标记为有风险。

测试执行期间产生的输出

PHPUnit 可以更严格对待测试执行期间产生的输出。 此项检查可以用命令行选项 --disallow-test-output 或在 PHPUnit 的 XML 配置文件中设置 beStrictAboutOutputDuringTests="true" 来启用。

简单来说就是不允许在测试执行期间有任何的输出(printecho等),否则就会标记为有风险。

测试执行时长的超时限制

如果安装了 PHP_Invoker 包并且 pcntl 扩展可用,那么可以对测试的执行时长进行限制。此时间限制可以用命令行选项 --enforce-time-limit 或在 PHPUnit 的 XML 配置文件中设置 beStrictAboutTestSize="true" 来启用。

带有 @large 标注的测试如果执行时间超过60秒将视为失败。此超时限制可以通过XML配置文件中的 timeoutForLargeTests 属性进行配置。

带有 @medium 标注的测试如果执行时间超过10秒将视为失败。此超时限制可以通过XML配置文件中的 timeoutForMediumTests 属性进行配置。

没有 @medium@large 标注的测试都将视同为带有 @small``标注,这类测试如果执行时间超过1秒将视为失败。此超时限制可以通过XML配置文件中的 ``timeoutForSmallTests属性进行配置。

上面的话总结起来就是:

  1. 需要安装PHP_Invokerpcntl拓展
  2. 可以使用命令行参数--enforce-time-limit或者XML配置文件参数beStrictAboutTestSize="true开启
  3. @large参数默认60秒,可以通过timeoutForLargeTests来修改
  4. @medium参数默认10秒,可以通过timeoutForMediumTests修改
  5. @small是默认配置,默认1秒,可以通过timeoutForSmallTests修改

全局状态篡改

PHPUnit 可以更严格对待篡改全局状态的测试。此项检查可以用命令行选项 --strict-global-state 或在 PHPUnit 的 XML 配置文件中设置 beStrictAboutChangesToGlobalState="true" 来启用。

简单来说开启这个配置之后,如果测试类中有篡改全局状态的代码,就会被认定为有风险的代码。至于全局状态,估计是$GLOBAL之类的值吧。

你可能感兴趣的:(php)