Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHPUnit中测试cmp()_Php_Laravel_Testing_Laravel 5_Phpunit - Fatal编程技术网

如何在PHPUnit中测试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; }

我最近才开始用PHP编写测试,现在我遇到了一个我不知道如何测试的场景

cmp的比较功能

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的另一个“客户机”(或“用户”或“消费者”)。单元测试的目标是确保类的外部行为(您可以通过公共方法使其执行的操作)是正确的。与任何其他客户机一样,单元测试不需要确切地知道外部行为是如何在内部实现的