2

次のコードでは、org.mockito.exceptions.misusing.MissingMethodInvocationException が発生します。

Level level = mock(Level.class);
IOException ioException = new IOException("test");
when(level.getSyslogEquivalent()).thenThrow(ioException);
4

1 に答える 1

5

MissingMethodInvocationException例外メッセージを確認しましたか?

それは言います:

when() requires an argument which has to be 'a method call on a mock'.
For example:
    when(mock.getArticles()).thenReturn(articles);

Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
   Those methods *cannot* be stubbed/verified.
2. inside when() you don't call method on mock but on some other object.
3. the parent of the mocked class is not public.
   It is a limitation of the mock engine.

クラスLevelが final である (このクラスを拡張したことを覚えているので明らかにそうではない) か、getSyslogEquivalentfinal である (最良の推測) のいずれかです。

したがって、設計またはテスト設計を修正するか、最終的なクラス/メソッドのモックを提供する Powermock を試す必要があります。

それが役立つことを願っています

于 2012-07-23T16:25:01.160 に答える