2016-04-21 165 views
1

我想单元测试使用spring和mockito的其余控制器。这是我的主控制器方法。使用mockMvc进行Spring JUnit测试

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响应我所用邮差工具,铬测试:

http://localhost:8086/LDAPAuthenticationApp/user/authenticate?name=amol84&password=pegasus84

回答

1

也许你应该与此网址尝试:

private static final String AUTHENTICATE_USER_TEST_URI = "/user/authenticate"; 
+0

是的,这是工作..谢谢为解决方案。 –