Весеннее тестирование JUnit с использованием mockMvc
Я пытаюсь протестировать мой контроллер покоя, используя пружину и мокито. Вот мой основной метод контроллера.
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:
1 ответ
Решение
Может быть, вы должны попробовать с этим URL:
private static final String AUTHENTICATE_USER_TEST_URI = "/user/authenticate";