我有一个包含输入和预期输出的数据文件.一个例子可能是:
input: output:
2 3
3 5
4 Exception
5 8
... ...
Run Code Online (Sandbox Code Playgroud)
目前,我有一个自定义解决方案,可以从数据文件中读取并对每个{input,output}对执行测试.我想将其转换为基于PHPUnit的解决方案,我希望每个输入使用测试名称forXassertY进行一次测试.所以前三个测试将被称为for2assert3(),for3assert5()和for4assertException().
如果可以动态创建测试方法并将数据文件作为这些测试的基础,我不想将现有数据转换为测试.我想将它转换为PHPUnit,因为我想稍后添加一些其他测试,并使用Hudson处理和查看输出.
建议?
小智 12
您可以使用PHPUnit的数据提供程序:
<?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);
}
}
?>
Run Code Online (Sandbox Code Playgroud)
并且您的test_data.txt文件看起来像这样:
1 2 3
2 2 4
3 5 7
Run Code Online (Sandbox Code Playgroud)
然后运行测试:
$ 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.
Run Code Online (Sandbox Code Playgroud)
嗯,PHP 文件只是文本文件,因此您可以编写一个 TestGenerator.php 脚本来读取数据文件并输出一堆 .php 测试文件。测试生成器脚本就像“读取该行,解析它,吐出 PHP”一样简单。然后,只需运行该测试生成器脚本作为构建/测试运行过程的一部分,就可以开始了。