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个断言,我失去了以下好处:
在这种情况下,什么
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 ,
];
}
}
有关参考,请参阅: