1

JUnit テストについて質問があります。

私は自分のコードをテストしようとしていますが、何らかの理由で常に失敗し続けています。これは私がテストしようとするコードです:

public void userInputWord() throws Exception{ 
    System.out.println("****Please input your word, 2 to 8 ***");
    System.out.println("**********character strings.**********");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    inputWord = br.readLine();
    setInputWord(inputWord);
    setWordLenght(inputWord.length());          
    System.out.println("***Please input amount of words you***");
    System.out.println("*************want to find*************");
    try{
        stringLadder = br.readLine();
        setLadder(Integer.parseInt(stringLadder));
    }catch(NumberFormatException nfe){
        System.out.println("Your input must be integer value.");
    }
    searchForMatch();
}

基本的に、このメソッドはユーザーに 2 つの値 (開始単語と、WordLadder として表示する単語数) を入力するように求めています。これらの値を set メソッドに割り当てています。このクラスの私の JUnit は次のとおりです。

public void testUserInputWord() {
    Generation gener = new Generation();
    StringReader read = new StringReader("broom");
    Scanner scan = new Scanner(read);
    gener.setInputWord(scan.toString());
    assertEquals("broom", gener.getInputWord());
}

私は以前にJUnitを書いたことがなく、いくつかの調査を行っただけです.誰かが私が間違っていることを説明できますか?

4

2 に答える 2

2

あなたは、JUnit テストが期待どおりに機能しないと言っています。おそらく、あなたが期待していたものを正確に教えてください.

Jon が言ったように、あなたが示したコード スニペットは実際には一緒に属していません。あなたのテストメソッドは、セッターとゲッターのsetInputWord/ペアをテストしているようです。getInputWordへの呼び出しは一切ありませんuserInputWord

testまた、テスト メソッドには接頭辞が付いていて、注釈がないことがわかります。これはひどく時代遅れの JUnit 3 スタイルです。JUnit クックブックをご覧ください。

于 2012-10-26T06:25:10.197 に答える
2

最初の問題は、テストしようとしているコードを決して呼び出していないことです。現時点でテストしているのは、getter と setter (ladderとの場合inputWord) だけです。

残念ながら、このuserInputWordメソッドは に依存しているため、テストが困難System.inです。ユーザー入力を「偽造」する方法が必要です。1 つのオプションは、メソッドが aScannerまたはおそらく aを取るようにすることReaderです。次に、 を介して適切なユーザー入力をすべて作成し、StringReader事前にプログラムしたデータをメソッドが読み取るようにすることができます。次に、結果をテストします。このクラスの他の部分にもユーザー入力が必要な場合は、コンストラクターがユーザー入力を表すために何か (おそらく a Scanner、おそらく a ) を取るように変更することができます。Reader繰り返しますが、テスト インスタンスを作成するときにテスト データを提供します。

基本的に、「ユーザー入力を提供するもの」という考えは、テストしようとしているコードの依存関係です。単体テストのスキルの多くは、テストの制御下にある依存関係を提供する方法を考え出すことです。これには、さまざまな状況に適した多くのアプローチがあります。この場合、StringReaderコンソールの代わりに既存の実装 ( ) を基になるデータ ソースとして使用できます。

于 2012-10-26T05:49:14.597 に答える