如何在PHPUnit中测试cmp()
问题描述:
我刚开始在PHP中编写测试,现在我遇到了一个我不知道如何测试的场景。如何在PHPUnit中测试cmp()
CMP
private function cmp($a, $b)
{
return max($a->getValue(), $b->getValue());
}
这callls它的功能的比较功能。
public function getCredits()
{
usort($this->credits, [$this, "cmp"]);
return $this->credits;
}
演属性是对象的阵列,当的getValue()被调用返回一个float
。
在Laravel/Homestead环境中使用PHPUnit。首先,它的私人,所以不能被直接调用,我想我将不得不使用反射类。其次,cmp()由PHP和usort()调用。
任何意见将不胜感激。
感谢
答
由于cmp
是一个私有方法,你通常不会测试它直接TLY。而是测试getCredits
并确认信用按正确的顺序返回。
背后的想法是,单元测试只是您类的公共API的另一个“客户”(或“用户”或“消费者”)。单元测试的目标是确保你的类的外部行为(你可以通过公共方法完成的事情)是正确的。就像任何其他客户端一样,单元测试并不需要精确地知道如何外部行为在内部实现。
答
通常你不会测试私有方法,在这种情况下,您的测试应该是这个样子:
$model = new Model([1,6,4,3]);
$this->assertEquals([1,3,4,6], $model->getCredits());
$model = new Model([0,0,4,2,4]);
$this->assertEquals([0,0,2,4,4], $model->getCredits());
显然,在你的情况,而不是简单的数字,您应该传递对象和你的cmp
函数似乎是错误的,因为通常它应该返回-1和1,你的返回例如10或20