#java #junit #mocking #mockito
#java #junit #насмешливый #mockito
Вопрос:
Я пытаюсь издеваться над методом, который используется во время выполнения родительского метода с помощью:
Mockito.when(sisSQL.getDocumentAsString(Mockito.any(java.sql.Clob.class))).thenReturn(expected);
Метод, который я пытаюсь сделать, макет:
protected String getDocumentAsString(Clob clob) throws IOException, SQLException {
if (clob == null) {
return "";
} else {
return new String(getDocument(clob), StandardCharsets.UTF_8);
}
}
Я точно так же издеваюсь над всеми другими методами, но здесь в результате я получаю:
But got org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Misplaced argument matcher detected here:
-> at pl.sygnity.common.db.SisSQLTest$callDBFuncTest.callDBFuncReturnsValue(SisSQLTest.java:91)
You cannot use argument matchers outside of verification or stubbing.
Examples of correct usage of argument matchers:
when(mock.get(anyInt())).thenReturn(null);
doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
verify(mock).someMethod(contains("foo"))
Also, this error might show up because you use argument matchers with methods that cannot be mocked.
Following methods *cannot* be stubbed/verified: final/private/equals()/hashCode().
Mocking methods declared on non-public parent classes is not supported.
at pl.xxx.common.db.SisSQLTest$callDBFuncTest.callDBFuncReturnsValue(SisSQLTest.java:91)
Почему это так?
Спасибо
Комментарии:
1. Ваш код в порядке. Проблема может быть вызвана кодом перед ним.
2. Я отмечаю, что вы пытаетесь имитировать метод в классе . Ваша жизнь станет намного лучше, если вы сможете преобразовать это в интерфейс.
3. @chrylis-осторожно оптимистично — Вы правы, однако я не могу этого сделать.