- - PR -
テストケースについて
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-03-17 12:06
こんにちは。
最近はJAVAはJUnitを使ってテストをするのがあたりまえのようですね。 そこでJAVAのテストで少し質問したいのですが、単体テストとはその単体のみ作成しながらでもテストできるようにすることですよね? そこで、メソッドごとにテストをしたいのですが、メソッドが次のように呼び出されるとします クラス1のメソッドA → クラス1のメソッドB → クラス2のメソッド この場合のテストで「クラス1のメソッドB→クラス2のメソッドC」の部分は クラス1のモックオブジェクトにクラス2のモックオブジェクトを持たせると言う形を使って メソッドBのみでテスト可能ですが、「メソッドA→メソッドB」の部分はどうしたらよいのでしょう? 「メソッドA→メソッドB」の部分をメソッドAのみの作成でテストができるようにするにはクラス1のモックオブジェクト作らないといけないように思います。 メソッドAのみでテストできる形にした方が良いのでしょうか? | ||||||||
|
投稿日時: 2004-03-17 12:42
すべてモックオブジェクトで処理するのではなく、メソッドを呼び出した結果、変更された内部状態をテストするようにしてはいかがでしょうか。
これであれば、メソッドの呼び出し順序を気にする必要がなくなります。
| ||||||||
|
投稿日時: 2004-03-17 15:25
よくやるのは、メソッドBをprotectedにして、テストケース内で
スタブコードでオーバーライドします。 例えば、こんな感じ...
で、Hoge#getReversedValue()がHoge#getValue()の結果を反転させることをテストしたい場合は、 まず、Hoge#getValue()をオーバーライド可能なようにprotectedにしてから...
のようにします。 ただし、テストしたいがためにprivateなメンバをprotectedにしないと いけない点がどうかと言う気もします。 とにかくカプセル化は壊したくない、という場合には使えないかもしれません。 # 私の場合は、protectedならどうせ見えても同一パッケージ内だけだという事で割り切ってます。 http://www-6.ibm.com/jp/developerworks/java/030207/j_j-mocktest.html が参考になるかと思います。 # サンプルコードに誤りがあったので直しました(^^; [ メッセージ編集済み 編集者: YOU@IT 編集日時 2004-03-17 15:27 ] | ||||||||
|
投稿日時: 2004-03-18 07:16
単体テストはそこまでスタブにこだわらなくても問題ないです。
実コードにバグが少なければそれを利用してテストするのが一般的な手法です。 実際単体テストなどに避ける工数は高々知れているので、なるべく効率的にやりましょう。 | ||||||||
|
投稿日時: 2004-03-18 10:27
こんにちは、Wataです。
私としては、単体テストは積み上げていくものだと思っています。なので、別のテストメソッドで、メソッドBの正当性が保証されていれば、メソッドAがテストがメソッドBに依存しても構わないと思います。 同様に、クラス2のメソッドCに関しても、クラス2のインスタンス化やメソッドCの呼び出しがハードコーディングされているならば、無理してスタブを用意する必要はないと思います。後に、リファクタリングされ、クラス2がインターフェースを介して使用されるようになったら、スタブを使うようにテストを変更するかもしれません。 | ||||||||
|
投稿日時: 2004-03-18 12:54
皆さん返信ありがとうございます。
大変参考になりました。 おかげで今後のテストケースを何処まで細かくするかが決まりました。 [ メッセージ編集済み 編集者: Rhyme 編集日時 2004-03-18 12:57 ] | ||||||||
1
