Я пытаюсь провести модульное тестирование моего контроллера отдыха, используя spring и mockito. Вот мой основной метод контроллера.
public static final String AUTHENTICATE_USER_URI = "/user/authenticate";
private static final Logger logger = LoggerFactory.getLogger(RestfulController.class);
@Autowired
User user;
@Autowired
AuthenticationService authService;
@CrossOrigin
@RequestMapping(value = (AUTHENTICATE_USER_URI), method = RequestMethod.GET, produces = "application/json")
private User getUserAuthenticationDetails(
@RequestParam("name") String name,
@RequestParam("password") String password) throws NamingException,
AuthenticationException {
boolean isAuth = true;
// checks user credentials
isAuth = authService.isAuthenticated(name, password);
if (isAuth) {
logger.debug("User is authenticated");
user = authService.getUserDetails(user, name);
// // persistUserInDB(user);
return user;
} else {
logger.debug("User is not authenticated");
return null;
}
}
Вот мой тест JUnit:
@RunWith(MockitoJUnitRunner.class)
public class RestfulControllerTest {
private static final String AUTHENTICATE_USER_TEST_URI = "http://localhost:8086/LDAPAuthenticationApp/user/authenticate";
private MockMvc mockmvc;
@Mock
private AuthenticationService authService;
@Before
public void setUp() {
mockmvc = MockMvcBuilders.standaloneSetup(new RestfulController())
.setHandlerExceptionResolvers(exceptionResolver())
.setMessageConverters(messageConverters())
.build();
}
private MappingJackson2HttpMessageConverter messageConverters(){
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
return converter;
}
private HandlerExceptionResolver exceptionResolver() {
// exceptionResolver implementation here
}
// success test case
@Test
public void testGetUserAuthenticationDetails() throws Exception {
String[] name={"amol84","arpan","juhi"};
String value="pegasus84";
when(authService.isAuthenticated(any(String.class), any(String.class))).thenReturn(true);
when(authService.getUserDetails(any(User.class),any(String.class))).thenReturn(any(User.class));
for(int i=0;i<3;i++){
mockmvc.perform(get(AUTHENTICATE_USER_TEST_URI).param("name", name[i]).param("password", value))
.andDo(print()).andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON));
}
verify(authService, atMost(3)).isAuthenticated(any(String.class), any(String.class));
}
В выходном ответе тест терпит неудачу, поскольку он получает ошибку 404, но ожидает код успеха 200. Что я могу сделать неправильно, поскольку я считаю, что правильно настроил автономную конфигурацию. Почему URI не сопоставляется с методом должным образом? Обратите внимание, что он работает правильно для того же URI из внешнего интерфейса приложения. Вот полный URI для правильного ответа 200, который я протестировал с помощью инструмента Postman для Chrome:
http://localhost:8086/LDAPAuthenticationApp/user/authenticate?name=amol84&password=pegasus84