以下哪个更好:
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);
}