Mockito — любой из java.sql.Clob

#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-осторожно оптимистично — Вы правы, однако я не могу этого сделать.