2011-11-10 8 views
0

ロジックと例外ブロックを持つメソッドがあり、例外ブロックの内容をテストしたいと思います。mockito - forceメソッドの部分的なモックを例外にして続行します。

方法:

Class Validator() { 

    protected Validator(blah,blah) { 

    } 

    protected boolean doStuff(String a, String b) { 

     try { 
      isValidInput(a){ 
     } catch (Exception e) { 
      b = "unknown error" 
     } 
    } 

テスト・ケース:

@Test 
public void testException() { 

Validator testValidator = new testValidator(blah, blah); 

     Validator spy = spy(testValidator); 
     String var2 = "unknown error" 
     doReturn(new Exception()).when(spy.doStuff(var1, var2)); 

     assertEquals("unknown error", var2); 
} 

どのように私は例外ブロックに移動して、スタブ継続する本当の方法を強制することができますか?

+0

あなたのテストの 'var2'はあなたがテストしているメソッドで設定した値を反映しないので、とにかく動作しません。 –

+0

var2を "不明なエラー"にしようとするとどうなりますか? – user1040730

+0

例外がある場合に返されるはずのメソッドは何ですか?これは、メソッドで公開されている唯一のものであるため、テストする必要があるのはこれだけです。例外を生成する入力を渡すか、例外をスローするために 'isValidInput'をスタブします。サブクラス化することもできます。 –

答えて

2

まず、spyを使用して忘れる - isValidInputは、それが例外をスロー作る、その後、例外をスローすることができる場合。

Mockitoを使用してことをあざけり、その後、Exceptionを投げることができるisValidInput()内で使用される協力者がある場合。それがあなたのコードの場合は、例外を生成するようにaを設定する必要があります。

あなたはまだisValidInput()上のすべてのテストを記述する必要が

- 例外をスローすると、テストの予想結果であることを指定するには、(私はあなたがここでのJUnitを使用していると仮定)@Testアノテーションの中でexpectedオプションを使用して調査します。しかしException投げないでください -

:-)そして@Daveニュートンはコメントとしての意味のサブクラスを使用して、var2決してdoStuffの範囲外で仕事に行くのですテスト。

+0

はvar2のテストについて合意しました。たとえば、私はコラボレーターが例外をスローするように模擬します。例外ブロックからストリングの内容を集めることができるでしょうか。私の協力者はDefaultHttpClient.execute()です。 – user1040730

+0

予想されるアノテーションを使用すると、doStuff()メソッドは例外をスローしますが、ブール値を返します。したがって、私のユニットテストで特定のタイプの例外が予想される場合、それは飲み込まれます。 – user1040730

関連する問題