Весенний тест 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();
Другие вопросы по тегам