假设我有以下课程:
class Foo
{
static function bar($inputs)
{
return $something;
}
}
现在,在测试类中,我有以下结构:
class FooTest extends PHPUnit_Framework_TestCase
{
function testBar()
{
$result = Foo::bar($sample_data_1);
$this->assertSomething($result);
$result = Foo::bar($sample_data_2);
$this->assertSomething($result);
$result = Foo::bar($sample_data_3);
$this->assertSomething($result);
}
}
这是一个很好的结构吗?我应该将testBar()
划分为3个单独的函数吗?为什么?为什么不呢?
答案 0 :(得分:6)
如果您使用具有不同数据集的相同代码并且您期望输出类似的输出,则可以使用dataProvider()
feature
<?php
class DataTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider provider
*/
public function testAdd($sample, $data, $result)
{
$this->assertEquals($result, Foo::bar($sample, $data);
}
public function provider()
{
return array(
array(0, 0, 0),
array(0, 1, 1),
array(1, 0, 1),
array(1, 1, 3)
);
}
}
如果你有完全不同的返回值/结构,例如它根据输入返回XML和JSON,那么最好有多个测试,因为你可以使用正确的assert[Xml/Json]StringMatches()
函数,你会得到更好的错误输出。
/**
* @expectedException InvalidArgumentException
*/
public function testError() {
Foo::bar("invalidArgument");
}