dataProvider的快速示例:
return [
['180d-1pc', '6m-1pc'],
]
并测试:
public function test_convert($title, $expected)
{
$uut = new Converter();
$this->assertEquals($expected, $uut->convertDayTitle($title));
}
(简单地说:如果我们将180天(天)转换为6米(月),则测试) 如您所见 - 在数据提供者中,定义了输入数据,也有预期的输出。
在许多情况下,这样做很好,但我一直有这种感觉,也许这不是最好的主意。所以我想知道是否可以被认为是不好的做法。如果是这样的话 - 我什么时候才能看到这样做?
一个例子是,当你想在两个测试中使用相同的dataProvider时 - 你应该定义两个期望值并使用其中一个吗?
快速示例(我刚刚提到了,所以不要注意我只是从标题中制作产品对象;)):
public function test_gets_discount_when_licence_period_longer_than_1year($title, $expectedTitle, $expectedDiscount) {
$prod = new Product($title);
$this->assertEquals($expectedDiscount, $product->hasDiscount();
}
如何让这更优雅?
答案 0 :(得分:1)
你正在做的是完全正常。数据提供者可以而且应该包括预期的测试结果。
关于重复使用相同的dataProvider进行2次测试的问题,并且仅使用一些字段:我会说如果字段是相关的(即它们是同一对象的属性),则可以接受。
如果您觉得dataProvider变得太大而复杂,因为2个测试必须使用来自它的数据,只需创建2个独立的dataProviders,并使用另一个私有公共方法来构建公共数据。