У моего класса UTILS есть метод инициирования, зависящий от внешних ресурсов (например, подключение к базе данных), который я безуспешно издевался над Mockito. Похоже, что UTILS может быть разделен на экстремальную роль моего приложения, поэтому объявляется как статическая (то есть переменная класса) в < /p>
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
}
...
}
< /code>
Я понимаю, что могу использовать инъекцию зависимостей для UTIL, но избегаю пружины. Сообщения о насмешливых статических полях заставляют меня чувствовать, что я близок: < /p>
@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());
}
< /code>
Но реальный экземпляр UTIL используется и называется в MockWorkitemHandler - не издеваренных UTILS - и «незаконченное загрязнение, обнаруженное», происходит исключение, где отмечено выше. Моя цель состоит в том, чтобы проверить призыв Utils.inserterrors, как прокомментировано в коде, и сделать это без побочных эффектов UTILS. Что мне не хватает в своих макетах, чтобы (1) использовать высмеиваемые утилиты (без побочных эффектов, таких как подключения к базе данных) и (2) для проверки того, что UTILS. -Inerterrors MockWorkitemHandler.>
Подробнее здесь: https://stackoverflow.com/questions/713 ... th-mockito
Измешивание на статическое поле, которое является классом с Mockito ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1758463680
Anonymous
У моего класса UTILS есть метод инициирования, зависящий от внешних ресурсов (например, подключение к базе данных), который я безуспешно издевался над Mockito. Похоже, что UTILS может быть разделен на экстремальную роль моего приложения, поэтому объявляется как статическая (то есть переменная класса) в < /p>
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
}
...
}
< /code>
Я понимаю, что могу использовать инъекцию зависимостей для UTIL, но избегаю пружины. Сообщения о насмешливых статических полях заставляют меня чувствовать, что я близок: < /p>
@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());
}
< /code>
Но реальный экземпляр UTIL используется и называется в MockWorkitemHandler - не издеваренных UTILS - и «незаконченное загрязнение, обнаруженное», происходит исключение, где отмечено выше. Моя цель состоит в том, чтобы проверить призыв Utils.inserterrors, как прокомментировано в коде, и сделать это без побочных эффектов UTILS. Что мне не хватает в своих макетах, чтобы (1) использовать высмеиваемые утилиты (без побочных эффектов, таких как подключения к базе данных) и (2) для проверки того, что UTILS. -Inerterrors MockWorkitemHandler.>
Подробнее здесь: [url]https://stackoverflow.com/questions/71300170/mocking-of-static-field-that-is-a-class-with-mockito[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия