0

私の問題は、クラスにパブリック メソッドがあり、それがプライベート メソッドを呼び出していることです。プライベート メソッドは別のプライベート メソッドを呼び出しており、4 つのチェーンされたプライベート メソッドを使用しています。パブリック メソッドに対してのみ単体テストを作成する必要があることはわかっています。私の場合、すべてのプライベート メソッドがパブリック メソッドから呼び出されるため、完全なコード カバレッジが得られます。しかし、何か問題が発生した場合、ユニットテストはどのメソッドが失敗したかを正確に知ることができません。メソッドのいくつかを別のクラスに移動してテストできるようにする必要があることはわかっていますが、これは、それぞれにメソッドが 1 つしかない 4 つの異なるクラスを作成する必要があることを意味します。

これらのプライベート メソッドをそれぞれテストする方法はありますか、それともプライベート メソッドをテストするために Visual Studio の統合機能を使用する必要がありますか?

4

3 に答える 3

3

パブリック メソッドを呼び出して、プライベート メソッド既にテストしています。public メソッドの入力と出力をテストします。これは private メソッドに依存しているため、すべてがテストされています。問題が発生すると例外が発生し、(スタック トレースを確認すると) 問題の原因となっているメソッド (プライベートまたはその他) が通知されます。

プライベート メンバーは、それだけでprivateです。それらはオブジェクトの内部の動作にのみ関係しているため、外部に公開するべきではありません。したがって、単体テストは公開されているものをテストする必要があり、テストすることしかできません。これは、既に行っていることです。

于 2011-06-05T20:57:51.560 に答える
1

観察可能な動作のテストに専念する必要があります。つまり、パブリック メソッドを呼び出した場合に予想される結果をテストします。プライベート メソッドが多くの作業を実行している場合は、テスト対象のオブジェクトに注入されたオブジェクトにそれらを移動することを検討してください。

于 2011-06-05T20:55:50.237 に答える
0

ストイメン、

仰るとおりです。

PRIVET メソッドは他の公開テスト内にあるため、テストすべきではないと言っているフォーラムの多くを読みました。しかし、主な理由は、分離して、ブロックを構築し、分離されたレベルのテストを作成することを簡単にすることです。あなたのためではなく、私の意見に同意しない他の人のために、簡単な例を 1 つ示します。このシナリオでは、私は車を製造して販売するだけなので、MakeChassi、MakeBody、および Paint を公開したくはありませんが、自分の工場を徹底的にテストしたいと考えています。public メソッドだけを使用すると、多くのテスト バリエーションを作成する必要があり、もちろんいくつかを忘れるリスクがあります。小さな部分をテストするだけで(ユニットテストの主な理由)、それらが機能していると確信しています。

于 2014-08-16T13:19:12.227 に答える