Расширение Mockito для имитации глубоких полей.
Mockito — это популярный инструмент для модульного тестирования в Java. Однако в сценарии, где classA вызывает classB, который вызывает classC, и нужно протестировать classA, возвращая разные результаты для методов classC без имитации classB, есть два основных решения:
Использовать многоуровневые вызовы с помощью отражения (но это может быть громоздко для более глубоких вызовов, и необходимо вручную восстанавливать контекст, чтобы не загрязнять другие тесты, поскольку контекст Spring является глобальным, если только не используется DirtesContext).
Перейти на использование PowerMock.
Для улучшения поддержки таких высокочастотных сценариев было разработано расширение для Mockito и Spring Test, которое поддерживает аннотированное вложение объектов для имитации.
@RunWith(SpringBeanMockTestClassRunner.class) // Использование расширения SpringJUnit4ClassRunner Runner
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class LoginServiceTest {
@MockBean("userService") // Пометка текущего свойства как целевого bean, который должен быть введен (то есть userService имеет свойство configurationService, которое вводится через Spring)
private ConfigurationService configurationService;
@Resource private LoginService loginService;
@Test
public void test(){
Mockito.when(configurationService.userCache()).thenReturn(true);
User user = loginService.login();
assertEquals("cache",user.getSource());
}
@Test
public void testFromDb(){
User user = loginService.login();
assertEquals("db",user.getSource());
}
}
В коде представлен полный пример для запуска. Поскольку связанного кода немного, он не упакован в jar-файл, а предоставляется напрямую в виде исходного кода, который можно использовать, просто ссылаясь на него.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )