Ich habe erholsamen Dienste und ich möchte Einheit sie testen, ohne auf die Datenbank zu verbinden, deshalb habe ich dieses Stück Code geschrieben:Warum MVM und Mockito nicht zusammenarbeiten?
@Before
public void setup() throws Exception {
this.mockMvc = webAppContextSetup(webApplicationContext).build();
adminDao = mock(AdminDaoImpl.class);
adminService = new AdminServiceImpl(adminDao);
}
@Test
public void getUserList_test() throws Exception {
User user = getTestUser();
List<User> expected = spy(Lists.newArrayList(user));
when(adminDao.selectUserList()).thenReturn(expected);
mockMvc.perform(get("/admin/user"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
.andExpect(jsonPath("$", hasSize(1)))
;
}
Der Dienst wird aufgerufen, aber mein Problem ist, diese Zeile Code
when(adminDao.selectUserList()).thenReturn(expected);
funktioniert nicht, ich meine, es ruft wirklich die adminDao.select-Methode und daher das Ergebnis aus der Datenbank. was ich nicht will. Haben Sie eine Idee, wie kann ich den Methodenaufruf verspotten?
Sie funktionieren perfekt zusammen, aber Sie spotten Klassen außerhalb des Kontexts, wie sollte der Kontext über diese Mocks wissen? –
@ M.Deinum Sie haben Recht, ich weiß, dass ich WebApplicationContext bekomme, aber eigentlich kann ich keine Möglichkeit finden, sie im MockMVC-Kontext zu verspotten. Wie kann ich es reparieren? – Shilan
Erstellen Sie eine Konfigurationsklasse, die die tatsächlichen Beans mit Mocks überschreibt. Injizieren Sie die Mocks in unserer Testklasse, um das gewünschte Verhalten aufzuzeichnen. –