Издевательство над статическим полем, которое является классом с MockitoJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Издевательство над статическим полем, которое является классом с Mockito

Сообщение Anonymous »

В моем классе Utils есть метод init, зависящий от внешних ресурсов (например, соединения с базой данных), который я безуспешно имитирую с помощью Mockito. Похоже, что Utils можно использовать в разных экземплярах моего приложения, поэтому он объявлен как статический (т. е. переменная класса) в

Код: Выделить всё

public class EmailNotificationWorkItemHandler extends AbstractLogOrThrowWorkItemHandler {
private static Utils utils = new Utils();

public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {

// Throw an error due to many missing parameters on the workitem
String id= (String) workItem.getParameter("ID");

...
try {
RequiredParameterValidator.validate(this.getClass(), workItem);
...
} catch (Throwable e) {
utils.insertErrors(id, errorCode, errorMessage, e.getStackTrace(), -1L);  // testing this method called
}

...
}

Я понимаю, что мог бы использовать внедрение зависимостей для Utils, но избегаю Spring. Сообщения о насмешках над статическими полями заставляют меня чувствовать, что я близок к этому:

Код: Выделить всё

@Test
public void executeWorkItemMissingParametersTest() {

Utils mockUtils = mock(Utils.class);
WorkItemManager mockWorkItemMgr = mock(WorkItemManager.class);
EmailNotificationWorkItemHandler mockWorkItemHandler =  mock(EmailNotificationWorkItemHandler.class);

doAnswer(new Answer() {
public Void answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
System.out.println("called with arguments: " + Arrays.toString(args));
return null;
}
}).when(mockUtils).insertErrors(any(), any(), any(), any(), anyLong());

try {
doAnswer(new Answer() {          // Unfinished stubbing detected
public Void answer(InvocationOnMock invocation) {
return null;
}
}).when(mockUtils);
Utils.init();
} catch (Exception e) {
System.out.println("In mocking of Utils.init() " + e.getLocalizedMessage());
}

WorkItemImpl workItem = new WorkItemImpl();
workItem.setParameter("ID", "1111-AAAA");
// Lots of required parameters removed to cause an exception and insertErrors to be called

mockWorkItemHandler.executeWorkItem(workItem, mockWorkItemMgr);
verify(mockUtils).insertErrors(any(), any(), contains("RequiredParameterValidator"), any(), anyLong());
}
Но реальный экземпляр Utils используется и вызывается в lockWorkItemHandler, а не в имитируемом Utils, и возникает исключение «Обнаружена незавершенная заглушка», отмеченное выше. Моя цель — протестировать вызов utils.insertErrors, как указано в коде, и сделать это без побочных эффектов Utils. Чего мне не хватает в моих макетах, чтобы (1) использовать имитируемые Utils (без побочных эффектов, таких как соединения с базой данных) и (2) проверить, вызывается ли utils.insertErrors макета макета WorkItemHandler для записи недостающих параметров?
Обратите внимание, что я показал, по-видимому, все соответствующие части EmailNotificationWorkItemHandler и Utils.

Подробнее здесь: https://stackoverflow.com/questions/713 ... th-mockito
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Использование Mockito-inline в проекте выдает ошибку «Mockito не может издеваться над этим классом».
    Anonymous » » в форуме JAVA
    0 Ответы
    56 Просмотры
    Последнее сообщение Anonymous
  • Как издеваться над финальным классом с Mockito-Core> 5.2.0 и без Mockito-inline?
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Издевательство над Apache HTTPClient с использованием Mockito
    Anonymous » » в форуме JAVA
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Издевательство над вложенными методами с помощью Mockito
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Издевательство TimeUnit.MILLISCONDS.sleep() с помощью Mockito
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»