2

以下哪个更好:

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

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

4

3 回答 3

1

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

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)”,因为该期望已在前一个测试中断言。

于 2013-10-18T21:44:29.510 回答
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 这样的动态类型语言,您还需要检查您的函数是否只能处理整数,您的函数是否也可以拒绝“错误类型”。

于 2013-10-18T21:10:05.530 回答
0

您的测试应该适用于不同的数字,因此您可以通过这种方式对其进行测试。

function it_should_return_number_of_string_provided()
{
    $randomValue = rand(1, 1000);
    $this->add($randomValue)->shouldReturn($randomValue);
}
于 2013-11-04T19:15:27.110 回答