如何使用PHPUnit的--filter选项按“结束”进行过滤?

时间:2016-02-10 05:35:24

标签: php regex phpunit

我正在尝试过滤PHPUnit测试套件。当我尝试使用--filter按测试名称进行过滤时,将执行与指定字符串完全匹配的测试,但也会执行与字符串一起使用的所有测试。

例如。如果我有两个测试,testExample和testExampleTwo,则以下两个测试运行。

phpunit --filter testExample tests/Example.php

我怎样才能让phpunit坚持我给它的确切字符串?我已经尝试了/testExample$/但是没有进行任何测试。我正在使用PHPUnit 3.7。

2 个答案:

答案 0 :(得分:3)

完全限定的测试名称取决于测试是否具有数据提供者。

如果没有数据提供者,则测试的名称只是Example::testExample,将使用/testExample$/执行。

phpunit --filter '/testExample$/' tests/Example.php

/**
 * No data provider.
 */
public function testExample() {

}

但是,对于数据提供者,测试变为Example::testExample with data set [dataset],与模式/testExample$/不匹配。

我不得不使用以下模式让它按预期工作,它匹配字符串的结尾或空格字符。

phpunit --filter '/testExample\b/' tests/Example.php

/**
 * @dataProvider  exampleData
 */
public function testExample($data) {

}

答案 1 :(得分:0)

要补充上述信息,当测试有数据提供者时,过滤器正则表达式也可用于选择要运行的测试用例循环。例如,--filter='thisTest\b.*#3' 将使用数据集编号 3 运行 thisTest。过滤似乎不适用于传递的数据值,仅适用于 # 编号。