У меня есть приложение Spring MVC. У него есть Контроллер, Сервис и Дао. Я хотел бы протестировать только Контроллер и Сервис путем Mocking слоя DAO с помощью Mockito.
Мой класс контроллера:
@Controller
@RequestMapping(value="/audit")
public class AuditController {
@Autowired
AuditService auditService;
...
}
Мой класс обслуживания:
@Service
public class AuditService {
@Autowired
AuditDao auditDao;
....
}
Мой тестовый класс:
@RunWith(SptringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/dispatcher-servlet.xml", "spring-context.xml"})
@WebAppConfiguration
public class AuditControllerTest {
private MockMvc mockMvc;
@Mock
AuditDao auditDao;
@Autowired
private WebApplicationContext webApplicationContext;
@Before
public void setUp() {
MockitAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void testGetAudit() {
Mockito.when(auditDao.getAudit(Mockito.any(Long.class))).thenReturn(new Audit(1L));
mockMvc.perform(get("/audit/{id}", "1")).andExpect(status().isOk());
}
}
ЗАДАЧА: ВыполняетЗвоните нормально, пройдя через автонастроенный контроллер и Сервис. Однако из Службы вызовы DAO направляются в реальный DAO, а не в Mocked DAO.
Я понимаю, что DAO автоматически подключен к реальному Dao, однако я не уверен, какзамените этот Dao на Mock из теста.
Сохранение Dao в контроллере и использование @InjectMock для контроллера работает нормально, но я хочу сохранить Dao в сервисе ипротестируйте только контроллер и службу, но смоделируйте только Dao.
Я подозреваю, что эта проблема связана с контекстами (контекст веб-приложения и контекст MockMvc), однако я неконечно, как решить.
Любая помощь будет принята с благодарностью. Заранее спасибо.