我正在尝试过滤PHPUnit测试套件。当我尝试使用 --filter
按测试名称过滤时,将执行与指定字符串完全匹配的测试,但任何以字符串开头的测试也是如此。
例如。如果我有两个测试,测试示例和测试示例二,则以下内容运行这两个测试:
phpunit --filter testExample tests/Example.php
我怎样才能让phpunit坚持我给它的确切字符串?我已经尝试过/testExample$/
但这没有运行任何测试。我正在使用 PHPUnit 3.7。
完全限定的测试名称因测试是否具有数据提供程序而异。
当没有数据提供者时,测试的名称只是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) {
}
为了补充上述信息,当测试具有数据提供程序时,筛选器正则表达式还可用于选择要运行的测试用例循环。例如--filter='thisTest'b.*#3'
将使用数据集编号 3 运行thisTest
。过滤似乎不适用于传递的数据值,仅适用于 # 数字。