PHPUnit - 当dataProvider返回一个空数组时,不要失败

时间:2014-05-25 12:53:10

标签: phpunit

我有一个使用@dataProvider的PHPUnit测试。数据提供程序检查文件系统中的某些文件。

但是,我在不同的环境中使用此测试,这意味着文件不存在会发生。这意味着dataProvider没有找到任何内容,并且没有执行测试。

这导致测试运行以失败告终。

问题:是一种配置PHPUnit以忽略具有不产生任何内容的提供程序的测试的方法吗?

2 个答案:

答案 0 :(得分:4)

虽然我不知道任何phpunit选项(这并不代表一个不存在),但您可以使用以下内容:

public function providerNewFileProvider()
{
    //get files from the "real" provider
    $files = $this->providerOldFileProvider();
    //no files? then, make a fake entry to "skip" the test
    if (empty($files)) {
        $files[] = array(false,false);
    }

    return $files;
}

/**
* @dataProvider providerNewFileProvider
*/

public function testMyFilesTest($firstArg,$secondArg)
{
    if (false === $firstArg) {
        //no files existing is okay, so just end immediately
        $this->markTestSkipped('No files to test');
    }

    //...normal operation code goes here
}

这是一种解决方法,当然,但它应该可以阻止错误显示。显然,无论你做什么都将取决于第一个(或任意)参数是否允许false,但你可以调整以适合你的测试。

答案 1 :(得分:3)

您也可以将测试标记为在数据提供程序中跳过,因此它不会失败,也不必按照其他答案中的建议添加包装数据提供程序。 / p>

public function fileDataProvider()
{
    $files = $this->getTestFiles();
    if (empty($files)) {
        $this->markTestSkipped('No files to test');
    }

    return $files;
}

/**
 * @dataProvider fileDataProvider
 */

public function testMyFilesTest($firstArg, $secondArg)
{
    //...normal operation code goes here
}