Cannot run single test with data provider in PHPUnit

后端 未结 5 413
失恋的感觉
失恋的感觉 2021-02-05 12:13

I\'ve got a problem when using command line to run tests: if I run phpunit like this:

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


        
相关标签:
5条回答
  • 2021-02-05 12:39

    By using a data provider with named datasets it's simpler now:

    public function provideData()
    {
        yield "dataset name 1" => [
            $expected = 0,
            $val1 = 1,
            $val2 = 2
        ];
    
        yield "dataset name 2" => [...];
    }
    

    $ phpunit --filter "dataset name 2"

    0 讨论(0)
  • 2021-02-05 12:45

    Like @sjoerd pointed out the name that gets matched against contains the number of the dataset.

    That means that this works:

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

    against your file produces:

    PHPUnit 3.7.0RC1 by Sebastian Bergmann.
    
    .
    
    Time: 0 seconds, Memory: 5.25Mb
    
    OK (1 test, 1 assertion)
    

    tested in PHPUnit 3.5 and upwards.


    It's not really pretty and having another syntax for this within PHPUnit is definitely preferable but for now it might solve your problem and once someone sends a PR it will be nicer to use ;)

    Tracking issue for the nicer syntax on the phpunit github issue tracker

    0 讨论(0)
  • 2021-02-05 12:54

    The regex to handle tests with or without data sets is

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

    For example

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

    Since a test method won't have a space in the name unless it has a data set, you could really shrink this to

    phpunit --filter "/::testAdd( .*)?$/" DataTest DataProviderTest.php
    
    0 讨论(0)
  • 2021-02-05 13:01

    In this case, the regex is matched against the following string:

    DataTest::testAdd with data set #0
    DataTest::testAdd with data set #1
    ...
    

    So naturally your regex testAdd$ won't work.

    0 讨论(0)
  • 2021-02-05 13:02

    The regex in the answer no longer seems to work (at least not in 4.0.12).

    It looks like --filter doesn't like the space, and gives the following error:

    Fatal error: "preg_match(): Compilation failed: missing ) at offset

    This is fixed by replacing the space with \s The quotes also need to get removed (or else the \ needs to be \)

    phpunit --filter /::testAdd(\s.*)?$/ DataTest DataProviderTest.php
    
    0 讨论(0)
提交回复
热议问题