- - PR -
テストについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-01 14:46
お世話になっています。
テスト方法についてお聞きしたいことがあります public void sample(){ ・ ・ ・ SampleClassA sca = new SampleClassA.getInstance(); if(sca == null){ //エラー処理 } } というメソッドで"sca == null"の場合のテストをしたいのですが SampleClassA.getInstance()はかならずインスタンスを返します。 scaをnullにしたいのですがどのようにしたらいいのでしょうか? それともこのようなテストは不要でしょうか? | ||||||||
|
投稿日時: 2007-06-01 15:12
すみません。補足します。
JUnitでテストを行います。 | ||||||||
|
投稿日時: 2007-06-01 15:25
私ならAspectJ使って復帰値を変更してテストしますね。(JUnitとは独立に)
ささいなことですが、 new SampleClassA.getInstance(); のnewはまちがいでしょう。 可能性が0ならそもそも処理を記述するほうがおかしいですが、まったくないわけでないのなら、おきたときに思ったとおりに動作するのか確認することは必要だと思います。 | ||||||||
|
投稿日時: 2007-06-01 15:28
かならずインスタンスを返すならテストは不要です。 インスタンスを返さないならSampleClassA#getInstance()のバグです。 あえてテストを作成するなら以下の様にsampleメソッドを変更する必要があります。
| ||||||||
|
投稿日時: 2007-06-01 15:29
nullを返すように改造するか、nullを代入すればよいのでは?
先にnew SampleClassA.getInstance();が、 nullを返さないことをJUnitでテストして保障すれば、 nullの場合の例外的な処理を書く必要がないと思います。
上記のようなコードでケース2の処理は不要ですよね。それと同じことです。 そうすれば、そもそもテストが不要ではないかと。 | ||||||||
|
投稿日時: 2007-06-01 15:38
みなさんどうもありがとうございます。
だっちょさん> >new SampleClassA.getInstance();のnewはまちがいでしょう。 すみませんその通りです。 AspectJですか。ちょっと調べてみます。 ぽんさん、かつのりさん> そうですよね。自分もテスト不要な気がしてきました。 | ||||||||
|
投稿日時: 2007-06-01 15:58
Javaは言語的に到達不能文をコンパイルエラーとしますが、
そこに倣うのであれば到達不可能なコードは書かないことが原則でしょうね。 なお、「到達不能文」の定義に関してはJava言語仕様に詳しく定められていますが まじめに読むとしんどいのでごく簡単な例と、検出されない例について。
本質的には無用であれば記述しないことが望ましいですね。 カバレッジテストの際の障害にもなりますし。 どうしても記述したい場合はassertを使いましょう。 | ||||||||
|
投稿日時: 2007-06-02 21:55
「かならずインスタンスを返す」というテストをSampleClassAに対して実施するべきでは?
それに反する動作をした場合のsample関数側の実装としては、 「NullPointerExceptionを起こすかもしれないし、起こさないかも知れない」 で良いでしょう。 システムの一部にbugがあった場合に何処でリカバーするかというのはシステム全体の設計に かかわる話ですが、SampleClassA.getInstance()を呼び出すたびに対処が必要だというのは、 あきらかに間違っています。 |