32

以下のように、Powermock と Mockito を使用して void static メソッドをモックし、例外をスローしようとしています。しかし、私は問題に遭遇しました。同じ引数で Adder.add() の 2 つの呼び出しを行わない限り、モックIOExceptionはスローされません。

ところで、ユニット テスト クラスに@RunWith(PowerMockRunner.class)andを追加しました。@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());
4

3 に答える 3

34

答えは以下の通りです。

ここ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());

編集:リンクが無効になっています。代わりにインターネット アーカイブ
を試してください。

于 2011-09-22T09:32:51.270 に答える
6

または

PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class, "add", Mathers.eq(12));
于 2016-10-19T19:49:42.520 に答える
0

PowerMock を再生モードにするのを忘れていませんか?

静的メソッドをモックする方法。

あなたのリンクごとに...

動作の検証方法 静的メソッドの検証は 2 つの手順で行われます。最初PowerMockito.verifyStatic()の呼び出しで動作の検証を開始し、検証する静的メソッドを呼び出します。例えば

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

verifyStatic()重要:メソッド検証ごとに呼び出す必要があります。

于 2011-09-20T10:31:14.203 に答える