Весенний тест mvc + mockito. @ModelAttribute NullPointer
Я пытаюсь провести модульное тестирование простого Spring-MVC-контроллера, но даже самый простой модульный тест не проходит, потому что @ModelAttribute
бросает NullpointerException
, Мой вопрос: как смоделировать / установить ModelAttribute
? Я пытался издеваться над findAll()
метод из хранилища, но он не работает.
Ниже приведены мои используемые классы:
TestContext:
@Configuration
public class TestContext {
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("i18n/messages");
messageSource.setUseCodeAsDefaultMessage(true);
return messageSource;
}
@Bean
public BenutzerRepository benutzerRepository() {
return Mockito.mock(BenutzerRepository.class);
}
}
StandaloneBenutzerController:
@RunWith(MockitoJUnitRunner.class)
@SpringApplicationConfiguration(TestContext.class)
public class StandaloneBenutzerControllerTest {
public MockMvc mockMvc;
@Mock
private BenutzerRepository benutzerRepositoryMock;
@Mock
private Benutzer benutzer;
@Before
public void setUp() {
this.benutzerRepositoryMock = Mockito.mock(BenutzerRepository.class);
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");
Benutzer hauke = new Benutzer("test","tester", "test@tester.de");
List<Benutzer> mockList = new ArrayList<Benutzer>();
mockList.add(hauke);
mockMvc = MockMvcBuilders.standaloneSetup(new BenutzerController()).setViewResolvers(viewResolver)
.build();
}
@Test
public void testSimpleStatus() throws Exception {
Mockito.when(benutzer.getEmail()).thenReturn("test@tester.de");
//Mockito.when(benutzerRepositoryMock.findAll()).thenCallRealMethod();
//Mockito.when(benutzerRepositoryMock.findAll()).thenReturn(userList);
this.mockMvc.perform(get("/verwaltung"))
.andExpect(status().isOk())
.andExpect(forwardedUrl("/WEB-INF/jsp/verwaltung.jsp"));
}
}
BenutzerController: часть, которая выбрасывает нулевой указатель
@ModelAttribute("userList")
public List<Benutzer> userList() {
return toList(repository.findAll());
}
1 ответ
Решение
Решение похоже на то, что Si mo намекнул установить репозиторий для тестируемого BenutzerController через конструктор:
mockMvc = MockMvcBuilders.standaloneSetup( new BenutzerController(benutzerRepositoryMock)).setViewResolvers(viewResolver).build();