Mockito не может вызвать экземпляр Logger - «Фактически, с этим макетом не было никаких взаимодействий». Разыскивается, но не используется
Мои занятия:
public class Util {
private static final CustomLogger LOGGER = new CustomLogger(Util.class);
public static void commitToDB() {
try {
CommitToDB();
} catch (SQLException sqlException) {
LOGGER.error("Exception in DB Commit", sqlException.getMessage(), sqlException);
}
}
}
Мой класс модульного теста:
@RunWith(PowerMockRunner.class)
@PrepareForTest({
CustomLogger.class
})
public class UtilTest {
@Mock
private Util util;
@Mock
private CustomLogger CustomLogger;
public void verifyFailedCommitRecords() throws SQLException {
SQLException sqlException = new SQLException("Exception in DB Commit");
doThrow(sqlException).when(protectedConn).commit();
CustomLogger logger = PowerMockito.mock(CustomLogger.class);
Util.CommitToDB();
verify(logger, times(1)).error("Exception in DB Commit", sqlException.getMessage(), sqlException);
}
}
Я получаю сообщение об ошибке: «На самом деле, с этим макетом не было никакого взаимодействия». Разыскивается, но не вызывается:
PS: Util.commitToDB вызывает внутренний класс protectedConnection, который выдает исключение SQLexception.
1 ответ
Добавление следующей строки в тестовый метод решает проблему:
Whitebox.setInternalState(Util.class , "LOGGER" , logger);
После отладки выяснилось, что экземпляр Logger в классе Util и в классе UtilTest были разными.
Причина, по которой макет выдавал ошибку «Разыскивается, но не вызван», заключается в том, что экземпляр регистратора, вызывающий метод, и тот, который использовался для проверки в модульном тесте, были разными.