のサブクラスであるクラスがありContext
ます。このクラスに依存する別のクラスを単体テストしているため、モックしました。ただし、元の動作として機能するメソッドがいくつか必要なので、それらを「モック解除」します。
それらの1つはgetAssets()
、私がこれを書いたので、正しく動作します:
Mockito.doReturn(this.getContext().getAssets()).when(keyboard).getAssets();
keyboard
言及されたクラスの模擬インスタンスです。
このメソッドはパラメーターをとらないため、オーバーライドは非常に簡単でした。
私もオーバーライドする必要がありますContext.getString(int)
。パラメータは物事を難しくし、プリミティブであるため、さらに困難になります。
このアドバイスと別のアドバイスを受けて、次のコードを書いてみました。
Mockito.when(keyboard.getString(Mockito.anyInt())).thenAnswer(new Answer<String>(){
@Override
public String answer(InvocationOnMock invocation) throws Throwable
Integer arg = (Integer)invocation.getArguments()[0];
return OuterClass.this.getContext().getString(arg.intValue());
}
});
これはコンパイルおよび実行されましたが、次の例外が発生しました。
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
0 matchers expected, 1 recorded:
-> at [...] <The code above>
This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
For more info see javadoc for Matchers class.
at android.content.Context.getString(Context.java:282)
at [...]
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:545)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1551)
したがって、主な質問は、プリミティブパラメーターを持つMockitoのメソッドをオーバーライドする方法ですか?
前もって感謝します