无法在 PHPUnit 中使用数据提供程序运行单个测试

2022-08-31 00:45:12

使用命令行运行测试时,我遇到了一个问题:如果我像这样运行phpunit:

phpunit -–no-configuration -–filter testAdd DataTest DataProviderTest.php

它工作正常。但是我们使用正则表达式来准确指定我们要测试的方法的名称:

phpunit -–no-configuration -–filter /::testAdd$/ DataTest DataProviderTest.php

不幸的是,第二种方法不起作用。源代码是:

<?php
class DataTest extends PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider provider
     */
    public function testAdd($a, $b, $c)
    {
        $this->assertEquals($c, $a + $b);
    }

    public function provider()
    {
        return array(
          array(0, 0, 0),
          array(0, 1, 1),
          array(1, 0, 1),
          array(1, 1, 3)
        );
    }
}

?>

答案 1

处理具有或不具有数据集的测试的正则表达式是

phpunit --filter "/::<method>( with data set .*)?$/" <class> <file>

例如

phpunit --filter "/::testAdd( with data set .*)?$/" DataTest DataProviderTest.php

由于测试方法的名称中没有空格,除非它具有数据集,因此您可以将其缩小到

phpunit --filter "/::testAdd( .*)?$/" DataTest DataProviderTest.php

答案 2

就像@sjoerd指出的那样,匹配的名称包含数据集的编号。

这意味着这有效:

phpunit --filter "testAdd with data set #0" DataTest DataProviderTest.php

针对您的文件生成:

PHPUnit 3.7.0RC1 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 5.25Mb

OK (1 test, 1 assertion)

在 PHPUnit 3.5 及更高版本中进行了测试。


它并不漂亮,在PHPUnit中为此提供另一种语法绝对是可取的,但现在它可能会解决您的问题,一旦有人发送PR,使用;)

phpunit github 问题跟踪器上更好的语法的跟踪问题


推荐