正しく機能しているソート機能をテストしようとしていますが、モックオブジェクトで機能をテストできないようです:
これはテストされる機能です:
public function getUsersSorted($users = null)
{
if ($users === null) {
if ($this->sortedUsers != null) {
return $this->sortedUsers;
}
$this->sortedUsers = $this->getUsersSorted($this->getActiveUsers());
return $this->sortedUsers;
}
$iterator = $users->getIterator();
$that = $this;
$iterator->uasort(
function ($a, $b) use ($that) {
return ($that->getPointsFor($a) > $that->getPointsFor($b)) ? -1 : 1;
}
);
$users = new ArrayCollection(iterator_to_array($iterator, false));
return $users;
}
getPointsFor 関数は次のようになります。
public function getPointsFor(User $user)
{
$points = 0;
// GameBets
foreach ($this->getBets($user) as $bet) {
$points += $bet->getPoints();
}
// Questions
foreach ($this->getQuestions() as $q) {
$bet = $this->getQuestionBet($q, $user);
$points += $bet->getPoints();
}
return $points;
}
このエラー メッセージの原因となるコード内の変更はありません。
ここでの更新 は、他のすべての呼び出された関数です。副作用は見られませんが、間違っている可能性があります。
public function getBets(User $user = null)
{
if ($user === null) {
return $this->bets;
}
$c = Criteria::create()
->where(Criteria::expr()->eq('user', $user));
return $this->bets->matching($c);
}
これは私のベット内の getPoints です:
public function getPoints(){
if(!isset($this->points)){
// This part is never used, since the points are already set in the test
$this->points = $this->reloadPoints();
}
return $this->points;
}
getQuestion と getQuestionbet も私のテストケースには適用できません。