我有一个包含输入和预期输出的数据文件.一个例子可能是:
input: output: 2 3 3 5 4 Exception 5 8 ... ...
目前,我有一个自定义解决方案,可以从数据文件中读取并对每个{input,output}对执行测试.我想将其转换为基于PHPUnit的解决方案,我希望每个输入使用测试名称forXassertY进行一次测试.所以前三个测试将被称为for2assert3(),for3assert5()和for4assertException().
如果可以动态创建测试方法并将数据文件作为这些测试的基础,我不想将现有数据转换为测试.我想将它转换为PHPUnit,因为我想稍后添加一些其他测试,并使用Hudson处理和查看输出.
建议?
您可以使用PHPUnit的
data providers:
原文链接:https://www.f2er.com/php/134788.html<?PHP require_once 'PHPUnit/Framework/TestCase.PHP'; class ProviderTest extends PHPUnit_Framework_TestCase { public function testCaseProvider() { // parse your data file however you want $data = array(); foreach (file('test_data.txt') as $line) { $data[] = explode("\t",trim($line)); } return $data; } /** * @dataProvider testCaseProvider */ public function testAddition($num1,$num2,$expectedResult) { $this->assertEquals($expectedResult,$num1 + $num2); } } ?>
并且您的test_data.txt文件如下所示:
1 2 3 2 2 4 3 5 7
然后运行测试:
$PHPunit ProviderTest.PHP PHPUnit 3.4.12 by Sebastian Bergmann. ...F Time: 0 seconds,Memory: 5.75Mb There was 1 failure: 1) ProviderTest::testAddition with data set #2 ('3','5','7') Failed asserting that two strings are equal. --- Expected +++ Actual @@ @@ -7 +8 /Users/dana/ProviderTest.PHP:23 FAILURES! Tests: 4,Assertions: 3,Failures: 1.