我正在尝试过滤PHPUnit测试套件。当我尝试使用--filter
按测试名称进行过滤时,将执行与指定字符串完全匹配的测试,但也会执行与字符串一起使用的所有测试。
例如。如果我有两个测试,testExample和testExampleTwo,则以下两个测试运行。
phpunit --filter testExample tests/Example.php
我怎样才能让phpunit坚持我给它的确切字符串?我已经尝试了/testExample$/
但是没有进行任何测试。我正在使用PHPUnit 3.7。
答案 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
。过滤似乎不适用于传递的数据值,仅适用于 # 编号。