2011-09-20 10 views
22

私はPowermockとMockitoを使って、以下のように例外をスローするvoid静的メソッドを模倣しようとしています。しかし、私は問題に会った。同じ引数を指定してAdder.add()を2回起動しない限り、IOExceptionは投げられません。Powermockで例外をスローするためにvoid静的メソッドをモックする方法はありますか?

私は@RunWith(PowerMockRunner.class)@PrepareForTest(Adder.class)をユニットテストクラスに追加しました。

class Adder{ 
    public static void add(int i) throws IOException{ 
     return; 
    } 
} 

@Test 
public void testAdder() throws IOException{ 
    PowerMockito.mockStatic(Adder.class); 
    PowerMockito.doThrow(new IOException()).when(Adder.class); 
    Adder.add(12); 
    try { 
     Adder.add(11); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    // assert things 
} 

ありがとうございます。 :)

回答は以下の通りです。

ここでは、http://code.google.com/p/powermock/issues/detail?id=278を参考にして、実際には上記のAdder.add(12)はモック静的メソッドを設定する作業の一部です。つまり、引数12でAdder.add()を呼び出すと、IOExceptionがスローされます。理解するのは難しいですね。 :)それは以下のように書かれるべきです。

PowerMockito.mockStatic(Adder.class); 
PowerMockito.doThrow(new IOException()).when(Adder.class); 
Adder.add(anyInt()); 

答えて

23

回答は以下のとおりです。

ここでは、http://code.google.com/p/powermock/issues/detail?id=278を参考にして、実際には上記のAdder.add(12)はモック静的メソッドを設定する作業の一部です。つまり、引数12でAdder.add()を呼び出すと、IOExceptionがスローされます。理解するのは難しいですね。 :)それは以下のように書かれるべきです。

PowerMockito.mockStatic(Adder.class); 
PowerMockito.doThrow(new IOException()).when(Adder.class); 
Adder.add(anyInt()); 

EDIT:
リンクが死んで、代わりにInternet Archive 1を試してみてください。

+2

これは直感的ではありません。この仕事を得るために苦労しました。先端に感謝します。 – Dhiraj

+1

'Adder.add(anyInt());'はここで例外を引き起こすものではなく、 'Adder.add()'の呼び出しにそれを適用することに注意してください。 – sjngm

0

再生モードでPowerMockを使用するのを忘れましたか?あなたのリンクパー

How to Mock Static methods.

...

静的メソッドの検証を2つの段階で行われる行動 を確認する方法。まず、PowerMockito.verifyStatic()を呼び出して動作の検証を開始し、検証する静的メソッドを呼び出します。例えば。

PowerMockito.verifyStatic(); 
Static.firstStaticMethod(param); 

重要:メソッド確認ごとにverifyStatic()に電話する必要があります。

+0

私はMockitoを使用していますので、私はここにチュートリアルをお読みください。 http://code.google.com/p/powermock/wiki/MockitoUsage13リプレイモードを使用する必要はありません。 – Smartmarkey

+0

PowerMockitoを見て、PowerMockを読んでください。 –

+0

リンクごとに編集されました –

1

それとも

PowerMockito.mockStatic(Adder.class); 
PowerMockito.doThrow(new IOException()).when(Adder.class, "add", Mathers.eq(12)); 
関連する問題