用文件系统来编排测试套件
最后更新于:2022-04-01 03:44:58
# 用文件系统来编排测试套件
编排测试套件的各种方式中,最简单的大概就是把所有测试用例源文件放在一个测试目录中。通过对测试目录进行递归遍历,PHPUnit 能自动发现并运行测试。
现在来看看 [sebastianbergmann/money](http://github.com/sebastianbergmann/money/) 这个库的测试套件。在这个项目的目录结构中,可以看到 `tests` 目录下的测试用例类镜像了 `src` 目录下被测系统(SUT, System Under Test)的包(package)与类(class)的结构:
~~~
src tests
`-- Currency.php `-- CurrencyTest.php
`-- IntlFormatter.php `-- IntlFormatterTest.php
`-- Money.php `-- MoneyTest.php
`-- autoload.php
~~~
要运行这个库的全部测试,只要将 PHPUnit 命令行测试执行器指向测试目录即可:
~~~
phpunit --bootstrap src/autoload.php tests
PHPUnit 5.0.0 by Sebastian Bergmann.
.................................
Time: 636 ms, Memory: 3.50Mb
OK (33 tests, 52 assertions)
~~~
>[info] ### Note
> 当 PHPUnit 命令行测试执行器指向一个目录时,它会在目录下查找 `*Test.php` 文件。
如果只想运行在 `CurrencyTest` 文件中的 `tests/CurrencyTest.php` 测试用例类中声明的测试,可以使用如下命令:
~~~
phpunit --bootstrap src/autoload.php tests/CurrencyTest
PHPUnit 5.0.0 by Sebastian Bergmann.
........
Time: 280 ms, Memory: 2.75Mb
OK (8 tests, 8 assertions)
~~~
如果想要对运行哪些测试有更细粒度的控制,可以使用 `--filter` 选项:
~~~
phpunit --bootstrap src/autoload.php --filter testObjectCanBeConstructedForValidConstructorArgument tests
PHPUnit 5.0.0 by Sebastian Bergmann.
..
Time: 167 ms, Memory: 3.00Mb
OK (2 test, 2 assertions)
~~~
>[info] ### Note
> 这种方法的缺点是无法控制测试的运行顺序。这可能导致测试的依赖关系方面的问题,参见 [the section called “测试的依赖关系”](# "测试的依赖关系")。在下一节中,可以看到如何用 XML 配置文件来明确指定测试的执行顺序。