У меня есть успокоительные услуги, и я хочу, чтобы блок проверить их без подключения к базе данных, поэтому я написал этот кусок кода:Почему mockMVC и mockito не работают вместе?
@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)))
;
}
Служба вызывается, но моя проблема заключается эта строка кода
when(adminDao.selectUserList()).thenReturn(expected);
не работает, я имею в виду, что он действительно вызывает метод adminDao.select и, следовательно, получает результат из базы данных. которого я не хочу. Вы знаете, как я могу высмеять вызов метода?
Они прекрасно работают вместе, но вы издеваетесь над классами вне контекста, как должен знать контекст об этих издевательствах? –
@ M.Deinum, вы правы, я знаю, что я получаю webApplicationContext, но на самом деле я не могу найти способ издеваться над ними в контексте mockMVC. Как я могу это исправить? – Shilan
Создайте класс конфигурации, который переопределяет фактические компоненты с помощью mocks. Внесите извинения в нашем тестовом классе, чтобы записать нужное поведение. –