2017-11-11 16 views
0

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を使用しています。

まず、そのプライベートなので、直接呼び出すことはできません。リフレクションクラスを使用する必要があると思います。 第2に、cmp()はPHPとusort()によって呼び出されます。

アドバイスをいただければ幸いです。

おかげ

答えて

1

はプライベートメソッドなので、通常はdirec tly。代わりにgetCreditsをテストし、クレジットが正しい順序で返されていることを確認します。

これは、単体テストがクラスのパブリックAPIの別の「クライアント」(または「ユーザー」または「コンシューマ」)にすぎないという考え方です。単体テストの目的は、クラスの外部振る舞い(パブリックメソッドを使用して行うことができること)が正しいことを確認することです。他のクライアントと同様に、ユニットテストでは、外部動作が内部的に実装されていることを正確に把握する必要はありません。

0

通常あなたはプライベートメソッドをテストしていないが、そのような場合には、あなたのテストはこのようなものになります。代わりにプレーンな数字で、あなたのケースで明らかに

$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を返します。

関連する問題