2016-04-21 13 views
1

Ich versuche, meine Ruhe-Controller mit Feder und Mockito testen. Hier ist meine Hauptsteuerungsmethode.Spring JUnit testen mit 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; 
    } 
} 

Hier mein JUnit-Test:

@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)); 
} 

In der Ausgangsantwort, Test versagt, da es 404 Fehler bekommen, aber es erwartet einen 200 Erfolgscode. Was könnte ich falsch machen, da ich glaube, dass ich die eigenständige Konfiguration korrekt eingerichtet habe? Warum wird der URI nicht ordnungsgemäß der Methode zugeordnet? Bitte beachten Sie, dass es für den gleichen URI vom Frontend der Anwendung korrekt funktioniert. Hier ist die vollständige URI für die richtige Antwort 200, die ich getestet habe für Chrom Postman-Tool:

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

Antwort

1

Vielleicht sollten Sie mit dieser URL versuchen:

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

ja, es funktioniert .. Danke für die Lösung. –

Verwandte Themen