Я видел пример , как для вызова контроллера Spring с помощью mockito.
Используя Mock, я вызываю контроллер Spring MVC. Контроллер вызывает сервисный класс Spring.
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/root-context.xml" })
public class TestController {
@Mock
private TestService testService;
@InjectMocks
private PaymentTransactionController paymentController;
private MockMvc mockMvc;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
this.setMockMvc(MockMvcBuilders.standaloneSetup(paymentController).build());
}
@Test
public void test() throws Exception {
this.mockMvc.perform(post("/tr/test").content(...)).andExpect(status().isOk());
// testService.save(); <-- another way
}
Хорошо, это работает хорошо. Я очень хорошо называю свой контроллер Spring. Но в контроллере Spring у меня есть внедренный сервисный уровень.
@Autowired
private TestService serviceTest;
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody()
public String test(HttpServletRequest request) {
...
serviceTest.save();
// in save method I call dao and dao perist data;
// I have injected dao intrface in serviceTest layer
...
return result;
}
Проблема в том, что мое приложение не вызывает метод сохранения, он не вводится в него. У меня тоже нет ошибки. Тот же результат, когда я вызываю метод save() из Junit (я прокомментировал его в методе test()).
Когда я отлаживаю, я видел, что метод прерывания происходит из org.mockito.internal.creation.MethodInterceptorFilter
Как решить эту проблему? что случается?