在dataProvider中定义期望是一种好习惯

时间:2015-05-14 01:34:40

标签: php unit-testing phpunit

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();
}

如何让这更优雅?

1 个答案:

答案 0 :(得分:1)

你正在做的是完全正常。数据提供者可以而且应该包括预期的测试结果。

关于重复使用相同的dataProvider进行2次测试的问题,并且仅使用一些字段:我会说如果字段是相关的(即它们是同一对象的属性),则可以接受。

如果您觉得dataProvider变得太大而复杂,因为2个测试必须使用来自它的数据,只需创建2个独立的dataProviders,并使用另一个私有公共方法来构建公共数据。