其中哪一个更好:
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);
}
即。我应该测试正面和负面结果吗?
答案 0 :(得分: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这样的动态类型语言,您还要检查如果您的函数只能处理整数,那么您的函数也可以拒绝“错误类型”。
答案 1 :(得分: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)”,因为在上一次测试中已经断言了这个期望。
答案 2 :(得分:0)
您的测试应适用于不同的数字,以便您可以通过这种方式进行测试。
function it_should_return_number_of_string_provided()
{
$randomValue = rand(1, 1000);
$this->add($randomValue)->shouldReturn($randomValue);
}