我应该在BDD中使用正面和负面断言吗?



以下哪个更好:

function it_should_return_number_of_string_provided()
{
    $this->add(1)->shouldReturn(1);
    $this->add(1)->shouldNotReturn(2);
}
function it_should_return_number_of_string_provided()
{
    $this->add(1)->shouldReturn(1);
}

即我应该同时测试阳性和阴性结果吗?

测试方面,您应该测试边缘案例、失败案例和成功案例。

例如,假设我正在测试一个函数,该函数对值 1 - 10 返回 true,否则返回 false。 我可能会运行以下测试,以确保我涵盖了我所有的基础。

OneToTenOrBust(1)    == true
OneToTenOrBust(5)    == true
OneToTenOrBust(10)   == true
OneToTenOrBust(0)    == false
OneToTenOrBust(11)   == false
OneToTenOrBust(-100) == false
OneToTenOrBust(100)  == false
测试

0,1 正在测试我的下限边缘情况。 10,11 正在测试我的上限边缘情况。 5 只是范围内的一个数字,这是真的。-100 个测试的负数。100 次测试,阳性数字超出范围。

对于像PHP这样的动态类型语言,您还需要检查如果您的函数只能处理整数,您的函数也可以拒绝"错误的类型"。

每个测试应该只断言一个期望。所以你可以改为写:

function When_add_one_number_should_return_one()
{
    $this->add(1)->shouldReturn(1);
}
function When_add_two_numbers_should_not_return_two()
{
    $this->add(1);
    $this->add(1)->shouldNotReturn(2);
}
测试函数名称

现在更具表现力,即您可以从函数名称推断出正在测试的确切内容。

另请注意,第二种方法现在只断言结果"shouldNotReturn(2)"。没有必要在前一行断言 "shouldReturn(1)",因为这个期望在前面的测试中已经断言了。

你的测试应该适用于不同的数字,所以你可以用这种方式测试它。

function it_should_return_number_of_string_provided()
{
    $randomValue = rand(1, 1000);
    $this->add($randomValue)->shouldReturn($randomValue);
}

相关内容

  • 没有找到相关文章

最新更新