0

静的メソッド呼び出しに大きく依存するレガシーコードをテストしようとしています。

基本的に、メソッドb()とc()を持つクラスAがあります。Ab()はvoidを返し、Ac()は値を返します。

実際のAb()が呼び出された場合、テスト対象のクラスは例外をスローするため、何もする必要はありません。ただし、使用する場合:

    PowerMockito.spy(A.class);
    PowerMockito.doNothing().when(A.class);

次に、Ac()をモックして必要な値を返すことはできません。これは、ラインが

PowerMockito.when(A.c()).thenReturn(value);

例外をスローします:Only void methods can doNothing()

Ab()に何もせず、Ac()を「オーバーライド」して正しい値を返す方法はありますか?

4

2 に答える 2

1

この問題を解決する回避策を見つけました。

Ac() をモックするには、次を使用します。

PowerMockito.mockStatic(A.class);
PowerMockito.when(A.c()).thenReturn(value);

次に、 で何もしないためにA.b()、次の行を追加します。

PowerMockito.suppress(PowerMockito.method(A.class, "b"));

私はとても汚いと感じます。

于 2013-02-11T17:17:12.503 に答える
0

の後にメソッド呼び出しが欠落していると思いますwhen()

PowerMockito API の時点で試してみてくださいPowerMockito.doNothing().when(A.class); A.b();

于 2013-02-11T16:58:22.657 に答える