У меня есть класс, который является подклассом Context
. Я тестирую единицы другого класса, которые имеют отношение к этому классу, и поэтому я издевался над ним. Тем не менее, мне нужны некоторые методы, чтобы действовать как их первоначальное поведение, поэтому я собираюсь «развязать» их.Mockito - переопределение метода, который принимает примитивные параметры
Один из них getAssets()
, так что я написал это, и она работает правильно:
Mockito.doReturn(this.getContext().getAssets()).when(keyboard).getAssets();
keyboard
является издевались экземпляр класса упоминается.
Поскольку этот метод не принимает параметров, переопределение его было довольно простым.
Мне также необходимо переопределить Context.getString(int)
. Параметр усложняет ситуацию и является примитивным, что еще более затрудняет задачу.
Я взял this advice и еще один, и попытался писать этот код:
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)
Так что главный вопрос заключается в том, чтобы переопределить методы в Мокито, которые имеют примитивные параметры?
Заранее спасибо
Я не могу воспроизвести вашу ошибку. Если вы ищете 'InvalidUseOfMatchersException', вы найдете множество связанных вопросов и ответов.Проблема в том, что вы вызываете метод Mockito с одним аргументом Matcher и без него, что запрещено по разным причинам. –
Спасибо, что попробовали. Да, я уже искал и все еще делаю. – Mousa