假设我有以下课程:
class Foo
{
static function bar($inputs)
{
return $something;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在测试类中,我有以下结构:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的结构吗?我应该testBar()分成3个独立的功能吗?为什么?为什么不?
如果您使用具有不同数据集的相同代码并且您期望类似的输出,则可以使用该dataProvider()功能
<?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)
);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你有完全不同的返回值/结构,例如它根据输入返回XML和JSON,那么最好有多个测试,因为你可以使用正确的assert[Xml/Json]StringMatches()函数,你会得到更好的错误输出.
/**
* @expectedException InvalidArgumentException
*/
public function testError() {
Foo::bar("invalidArgument");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |