如何在PHPUnit中测试cmp()
我最近才开始用PHP编写测试,现在我遇到了一个我不知道如何测试的场景 cmp的比较功能如何在PHPUnit中测试cmp(),php,laravel,testing,laravel-5,phpunit,Php,Laravel,Testing,Laravel 5,Phpunit,我最近才开始用PHP编写测试,现在我遇到了一个我不知道如何测试的场景 cmp的比较功能 private function cmp($a, $b) { return max($a->getValue(), $b->getValue()); } 以及调用它的函数 public function getCredits() { usort($this->credits, [$this, "cmp"]); return $this->credits; }
private function cmp($a, $b)
{
return max($a->getValue(), $b->getValue());
}
以及调用它的函数
public function getCredits()
{
usort($this->credits, [$this, "cmp"]);
return $this->credits;
}
credits属性是一个对象数组,当调用getValue()时,该数组返回一个浮点值
我在拉维/家园环境中使用PHPUnit
首先,它是私有的,所以不能直接调用,我想我必须使用反射类。
其次,PHP和usort()调用cmp()
如有任何建议,将不胜感激
谢谢通常您不测试私有方法,在这种情况下,您的测试应该如下所示:
$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,因为cmp
是一个私有方法,您通常不会直接测试它。相反,您可以测试getCredits
,并验证是否按正确的顺序返回了信用
这背后的想法是,单元测试只是类的公共API的另一个“客户机”(或“用户”或“消费者”)。单元测试的目标是确保类的外部行为(您可以通过公共方法使其执行的操作)是正确的。与任何其他客户机一样,单元测试不需要确切地知道外部行为是如何在内部实现的