首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Organizing Tests

PHPUnit 的目标之一是测试应该是可组合的:我们希望能够运行任意数量或组合的测试,例如整个项目的所有测试,或者测试组件的所有类别的测试该项目,或只是一个班的测试。

PHPUnit 支持组织测试并将它们组合成测试套件的不同方式。本章介绍最常用的方法。

使用文件系统编写测试套件

组成测试套件的最简单方法可能是将所有测试用例源文件保存在测试目录中。PHPUnit 可以通过递归遍历测试目录来自动发现和运行测试。

让我们看看sebastianbergmann / money库的测试套件。查看这个项目的目录结构,我们看到目录中的测试用例类在tests目录中镜像被测系统(SUT)的包和类结构src

代码语言:javascript
复制
src                                 tests
`-- Currency.php                    `-- CurrencyTest.php
`-- IntlFormatter.php               `-- IntlFormatterTest.php
`-- Money.php                       `-- MoneyTest.php
`-- autoload.php

要运行库的所有测试,我们只需要将 PHPUnit 命令行测试运行器指向测试目录即可:

代码语言:javascript
复制
phpunit --bootstrap src/autoload.php tests
PHPUnit 6.4.0 by Sebastian Bergmann.

.................................

Time: 636 ms, Memory: 3.50Mb

OK (33 tests, 52 assertions)

如果您将 PHPUnit 命令行测试运行器指向一个目录,它将查找*Test.php文件。

要仅运行在CurrencyTest测试用例类中声明的测试,tests/CurrencyTest.php我们可以使用以下命令:

代码语言:javascript
复制
phpunit --bootstrap src/autoload.php tests/CurrencyTest
PHPUnit 6.4.0 by Sebastian Bergmann.

........

Time: 280 ms, Memory: 2.75Mb

OK (8 tests, 8 assertions)

为了更细致地控制运行哪些测试,我们可以使用以下--filter选项:

代码语言:javascript
复制
phpunit --bootstrap src/autoload.php --filter testObjectCanBeConstructedForValidConstructorArgument tests
PHPUnit 6.4.0 by Sebastian Bergmann.

..

Time: 167 ms, Memory: 3.00Mb

OK (2 test, 2 assertions)

这种方法的缺点是我们无法控制测试的运行顺序。这可能会导致测试依赖关系问题,请参阅“测试依赖关系”一节。在下一节中,您将看到如何使用 XML 配置文件来明确测试执行顺序。

使用 XML 配置编写测试套件

PHPUnit 的 XML 配置文件(附录C)也可用于组成测试套件。例5.1显示了一个最小phpunit.xml文件,当目录递归遍历时,它将添加*Test*Test.php文件中找到的所有类tests

例5.1:使用 XML 配置编写测试套件

代码语言:javascript
复制
<phpunit bootstrap="src/autoload.php">
  <testsuites>
    <testsuite name="money">
      <directory>tests</directory>
    </testsuite>
  </testsuites>
</phpunit>

如果phpunit.xmlphpunit.xml.dist(按该顺序)存在于当前工作目录--configuration且未被使用,配置将自动从该文件中读取。

可以明确执行测试的顺序:

例5.2:使用 XML 配置编写测试套件

代码语言:javascript
复制
<phpunit bootstrap="src/autoload.php">
  <testsuites>
    <testsuite name="money">
      <file>tests/IntlFormatterTest.php</file>
      <file>tests/MoneyTest.php</file>
      <file>tests/CurrencyTest.php</file>
    </testsuite>
  </testsuites>
</phpunit>

扫码关注腾讯云开发者

领取腾讯云代金券