- PR -

テストについて

投稿者投稿内容
コージ
常連さん
会議室デビュー日: 2005/07/29
投稿数: 39
投稿日時: 2007-06-01 14:46
お世話になっています。

テスト方法についてお聞きしたいことがあります

public void sample(){

 ・
 ・
SampleClassA sca = new SampleClassA.getInstance();

if(sca == null){
//エラー処理
}

}

というメソッドで"sca == null"の場合のテストをしたいのですが
SampleClassA.getInstance()はかならずインスタンスを返します。
scaをnullにしたいのですがどのようにしたらいいのでしょうか?
それともこのようなテストは不要でしょうか?
コージ
常連さん
会議室デビュー日: 2005/07/29
投稿数: 39
投稿日時: 2007-06-01 15:12
すみません。補足します。
JUnitでテストを行います。
だっちょ
大ベテラン
会議室デビュー日: 2006/12/05
投稿数: 115
投稿日時: 2007-06-01 15:25
 私ならAspectJ使って復帰値を変更してテストしますね。(JUnitとは独立に)
 ささいなことですが、
new SampleClassA.getInstance();
のnewはまちがいでしょう。
 可能性が0ならそもそも処理を記述するほうがおかしいですが、まったくないわけでないのなら、おきたときに思ったとおりに動作するのか確認することは必要だと思います。
ぽん
大ベテラン
会議室デビュー日: 2003/05/13
投稿数: 157
投稿日時: 2007-06-01 15:28
引用:

SampleClassA.getInstance()はかならずインスタンスを返します。


かならずインスタンスを返すならテストは不要です。
インスタンスを返さないならSampleClassA#getInstance()のバグです。

あえてテストを作成するなら以下の様にsampleメソッドを変更する必要があります。
コード:
public void sample(SampleClassA sca){ 
    if(sca == null){ 
    } 
}

かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-06-01 15:29
nullを返すように改造するか、nullを代入すればよいのでは?

先にnew SampleClassA.getInstance();が、
nullを返さないことをJUnitでテストして保障すれば、
nullの場合の例外的な処理を書く必要がないと思います。

コード:
String foo = "bar";
if(foo != null){
//ケース1
}else{
//ケース2
}



上記のようなコードでケース2の処理は不要ですよね。それと同じことです。
そうすれば、そもそもテストが不要ではないかと。
コージ
常連さん
会議室デビュー日: 2005/07/29
投稿数: 39
投稿日時: 2007-06-01 15:38
みなさんどうもありがとうございます。

だっちょさん>
>new SampleClassA.getInstance();のnewはまちがいでしょう。
すみませんその通りです。
AspectJですか。ちょっと調べてみます。

ぽんさん、かつのりさん>
そうですよね。自分もテスト不要な気がしてきました。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-06-01 15:58
Javaは言語的に到達不能文をコンパイルエラーとしますが、
そこに倣うのであれば到達不可能なコードは書かないことが原則でしょうね。

なお、「到達不能文」の定義に関してはJava言語仕様に詳しく定められていますが
まじめに読むとしんどいのでごく簡単な例と、検出されない例について。
コード:
    public void hoge() {
        return;
        // returnの後ろに書かれたコード。到達不能文。コンパイルエラーになる
        piyo();
    }

    public void piyo() {
        int i = 5;
        if (i > 7) {
            // i は5以外の値をとらないからここには到達しないが
            // このようなケースはコンパイルエラーとはならない
            foo();
        }
    }



本質的には無用であれば記述しないことが望ましいですね。
カバレッジテストの際の障害にもなりますし。
どうしても記述したい場合はassertを使いましょう。
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2007-06-02 21:55
「かならずインスタンスを返す」というテストをSampleClassAに対して実施するべきでは?
それに反する動作をした場合のsample関数側の実装としては、
「NullPointerExceptionを起こすかもしれないし、起こさないかも知れない」
で良いでしょう。

システムの一部にbugがあった場合に何処でリカバーするかというのはシステム全体の設計に
かかわる話ですが、SampleClassA.getInstance()を呼び出すたびに対処が必要だというのは、
あきらかに間違っています。

スキルアップ/キャリアアップ(JOB@IT)