2017-12-08 7 views
3

나는 mockito를 사용하여 테스트 케이스를 작성했습니다. 아래는 테스트 케이스의 코드입니다. 그 두 번째 시험은 널 항상 잘하지만를 반환하는 작업 첫 번째 테스트 케이스의 경우메서드가 junit에서 null을 반환 할 때 mockito

@RunWith(SpringRunner.class) 
public class LoginControllerTest { 

    private MockMvc mockMvc; 

    @InjectMocks  
    private LoginService loginService; 

    @Mock 
    private LoginController loginController; 

    @Before 
    public void setup() { 
     MockitoAnnotations.initMocks(this); 
     // Setup Spring test in standalone mode 
     mockMvc = MockMvcBuilders.standaloneSetup(loginController).build(); 

    } 

    @Test 
    public final void test() throws Exception { 

     // Assign 
     when(loginService.test()).thenReturn("hello"); 

     // act 
     mockMvc.perform(get("/hello")) 
       // Assertion 
       .andExpect(status().isOk()) 
       .andExpect(content().string("Message from service: hello")); 
     verify(loginService).test(); 
    } 

    @Test 
    public final void usernameInvalidAndPassword() throws Exception { 

     User userData = new User(); 
     userData.setUserName("[email protected]"); 
     userData.setPassword("Passw0rd"); 


     User userDataNew = new User(); 
     userDataNew.setUserName("[email protected]"); 
     userDataNew.setPassword("Passw0rd"); 


     JSONObject requestBody = new JSONObject(); 

     requestBody.put("userName", "[email protected]"); 
     requestBody.put("password", "Passw0rd"); 

     JSONObject responseBody = new JSONObject(); 

     responseBody.put("status_code", "200"); 
     responseBody.put("message", "ok"); 

     // Assign 
     when(loginService.saveUser(userData)).thenReturn(userDataNew); 

     // act 
     mockMvc.perform(get("/login") 
       .param("userName", "[email protected]") 
       .param("password", "Passw0rd")) 
       // Assertion 
       .andExpect(status().isOk()).andExpect(content().json(responseBody.toString())).andDo(print()); 
    } 

. 아무도 도와 줄 수 있습니까? 미리 감사드립니다.

답변

1

LoginController와 LoginService의 주석이 잘못되었습니다. 당신이 그것을 조롱하고 싶지 않은 있도록 컨트롤러를 테스트하고 있으며,이 할 필요가 그래서 당신은 당신의 서비스에 방법을 스텁되는 모의 :

제 생각에는
@Mock 
private LoginService loginService; 

@InjectMocks 
private LoginController loginController; 
0

당신이에 다음 중 하나

1) 테스트중인 메서드 내에서 만든 User 개체가 테스트에서 만들고 사용하는 개체와 다른 인스턴스이기 때문에 usernamepassword을 기반으로 equals 메서드를 도입하십시오.

when(loginService.saveUser(Mockito.any(User.class))).thenReturn(userDataNew); 
:

2)하면 셋업에 와일드 카드를 사용하여