Php 如何组织在一系列类似输入上运行的测试?

Php 如何组织在一系列类似输入上运行的测试?,php,phpunit,Php,Phpunit,给定一组测试数据文件 test001.txt test002.txt 等等 和预期结果数据文件 expected001.txt expected002.txt 等等 我正在使用phpunit测试数据处理功能: public function test001() { $fn = "test001.txt"; $data = file_get_contents($fn); // code to perform the test, and create $proces

给定一组测试数据文件

  • test001.txt
  • test002.txt
  • 等等
和预期结果数据文件

  • expected001.txt
  • expected002.txt
  • 等等
我正在使用
phpunit
测试数据处理功能:

public function test001()
{
    $fn = "test001.txt";
    $data = file_get_contents($fn);

    // code to perform the test, and create $processedData from  $data

    $fn = "expected001.txt";
    $expestedData = file_get_contents($fn);

    $this->assertEquals($expestedData, $processedData);
}
所有成对的测试数据文件和相应的结果数据文件的过程代码完全相同

因此,要对所有文件应用测试,我可以进行循环:

public function test001to213()
{
    for ($k = 0; $k < 213; $k++) {
        $fn = "test".sprintf('%03d', $k).".txt";
        $data = file_get_contents($fn);

        // data process code to create $processedData from $data

        $fn = "expected".sprintf('%03d', $k).".txt";
        $expectedData = file_get_contents($fn);

        $this->assertEquals($expectedData, $processedData);
    }
}
公共函数test001to213()
{
对于($k=0;$k<213;$k++){
$fn=“test”.sprintf('%03d',$k)。“.txt”;
$data=文件获取内容($fn);
//从$data创建$processedData的数据处理代码
$fn=“预期的”.sprintf('%03d',$k)。“.txt”;
$expectedData=文件获取内容($fn);
$this->assertEquals($expectedData,$processedData);
}
}
然而,通过这种方式,我在一个测试中有213个断言,我失去了以下好处:

  • 我无法知道哪些测试失败/通过,因为测试会因第一次失败的断言而停止
  • 在第二次执行时,我不能只运行失败的测试
  • 我无法选择特定的测试编号x-以在调试模式下运行
  • 在添加更多代码以获得这些好处之前,是否有更好的解决方案?
    在这种情况下,什么
    phpunit
    功能有帮助

    您可以改用数据提供程序:

    /**
     * @dataProvider providerFilenames
     *
     * @param string $testFilename
     * @param string $expectedFilename
     */
    public function testContent($testFilename, $expectedFilename)
    {
        $data = file_get_contents($testFilename);
    
        // code to perform the test, and create $processedData from  $data
        $processedData = '';
    
        $expectedData = file_get_contents($expectedFilename);
    
        $this->assertEquals($expectedData, $processedData);
    }
    
    /**
     * @return \Generator
     */
    public function providerFilenames()
    {
        for ($key = 0; $key < 213; ++$key) {
            $testFilename = sprintf(
                'test%03d.txt',
                $key
            );
    
            $expectedFilename = sprintf(
                'expected%03d.txt',
                $key
            );
    
            /**
             * by yielding with a name here, it's easier to tell which set failed
             */
            $name = sprintf(
                'this is set %03d',
                $key
            );
    
            yield $name => [
                $testFilename,
                $expectedFilename ,
            ];
        }
    }
    
    有关参考,请参阅:


    您可以改用数据提供程序:

    /**
     * @dataProvider providerFilenames
     *
     * @param string $testFilename
     * @param string $expectedFilename
     */
    public function testContent($testFilename, $expectedFilename)
    {
        $data = file_get_contents($testFilename);
    
        // code to perform the test, and create $processedData from  $data
        $processedData = '';
    
        $expectedData = file_get_contents($expectedFilename);
    
        $this->assertEquals($expectedData, $processedData);
    }
    
    /**
     * @return \Generator
     */
    public function providerFilenames()
    {
        for ($key = 0; $key < 213; ++$key) {
            $testFilename = sprintf(
                'test%03d.txt',
                $key
            );
    
            $expectedFilename = sprintf(
                'expected%03d.txt',
                $key
            );
    
            /**
             * by yielding with a name here, it's easier to tell which set failed
             */
            $name = sprintf(
                'this is set %03d',
                $key
            );
    
            yield $name => [
                $testFilename,
                $expectedFilename ,
            ];
        }
    }
    
    有关参考,请参阅: