我有一个使用@dataProvider
的PHPUnit测试。数据提供程序检查文件系统中的某些文件。
但是,我在不同的环境中使用此测试,这意味着文件不存在会发生。这意味着dataProvider没有找到任何内容,并且没有执行测试。
这导致测试运行以失败告终。
问题:是一种配置PHPUnit以忽略具有不产生任何内容的提供程序的测试的方法吗?
答案 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
}