2

私は PHPUnit を使用しており、私の伝統的なアプローチは、テストしているメソッドによって呼び出されるモック オブジェクトとメソッドを使用することです。モック オブジェクトは、単体テストによって入力として何を期待するかを伝えられます。問題は、モック オブジェクトに提供される入力の一部が、テスト対象のメソッドによってランダムに生成されることです (単体テストでは、それらが何であるかを知る方法がありません)。

誰かが解決策を提案できるかどうか疑問に思っています。

4

5 に答える 5

2

特定のケースを知らずに判断するのは難しいですが、テスト対象のオブジェクトに乱数プロバイダーを挿入するようにリファクタリングできるかもしれません。テスト中に、ハードコーディングされた乱数シードを使用して、再現可能な結果を​​得ることができます。

于 2009-10-17T18:40:22.273 に答える
2

期待される結果のマップがあり、キー セットからランダムに描画する場合、ある程度のランダム性を持たせても、期待される結果を予測することができます。

于 2009-10-17T18:47:10.067 に答える
2

「ランダム部分」をメソッドに注入できますか (または、ランダム性コア機能ですか)?

たとえば(「ランダム」を文字通りに取った単純化された例かもしれません)代わりに

function foo($x, $y) {
  return $x * rand(1, $y);
}

のようなものを使用します

function foo($x, $r) {
  return $x * $r->getNext();
}

このようにして、実際にはランダムな値を返さない $r のオブジェクトを渡すことができるため、テストで可能な限り多くの「ランダム性」を排除しますが、エッジ ケースなどです。

于 2009-10-17T18:47:10.247 に答える
1

私は常に単体テストを反復可能なものと考えています。(つまり、各実行は同じように動作し、同じ結果が得られます)。
単体テストには他にも前提条件がありますが、私にとっては最も重要なものです。(この非常に優れた定義を見てください)

これを考えると、特定のケースをテストすることは不可能に見えるかもしれません.
あなたのコードのランダムなものを特定の部分に分けようとします。次に、それをデータ ソースと見なして、モックも作成します。

これをあなたの文脈に適用できることを願っています。

于 2009-10-17T18:51:39.737 に答える
0

入力に関して厳密なモックを使用する必要はありません。テストに価値を追加する場合にのみ使用してください。

他のシナリオでは、入力を気にしないスタブを使用するか、必要に応じていくつかのメソッドを厳密にし、いくつかのメソッドを緩くします。

于 2009-10-17T18:40:44.783 に答える