2015-10-13 2 views
0

Я тест Mockito, который использует Аргумент Captor для проверки нового пользователя был вывешен правильно:Mockito Довод Captor Test Возвратившись Всего JSON объект

@Test 
public void testPostUser() throws Exception{ 
    User user = new User(1L, "tonkatruck"); 

    when(userService.addUser(any(User.class))).thenReturn(user); 

    mockMvc.perform(post("/api/user") 
     .content("{\"userId\":\"1\",\"userName\":\"tonkatruck\"}") 
     .contentType(MediaType.APPLICATION_JSON)) 
      .andExpect(jsonPath("$.userName", is(user.getUserName()))) 
      .andExpect(status().isCreated()) 
      .andDo(print()); 


    //verify(userService).addUser(any(User.class)); 
    verify(userService).addUser(userCaptor.capture()); 

    //get the username from what was captured in the POST method and assert that it posted the correct username 
    String username = userCaptor.getValue().getUserName(); 
    assertEquals("tonkatruck", username); 
} 

тест завершается с ошибкой:

Failed tests: testPostUser(com.ucrisko.libroomreserve.tests.UserControllerTest): expected:<[tonkatruck]> but was:<[{"userId":"1","userName":"tonkatruck"}]> 

Я вызываю метод getUserName() класса User на объекте userCaptor, поэтому любая идея, почему утверждение выдается как весь пользовательский объект JSON?

ответ

0

Чтобы воспроизвести вашу ошибку, я пробовал ваш тест. Некоторые допущения были сделаны для реализации контроллера и обслуживания. Вы можете найти обновление теста класса:

package mvc; 

import static org.hamcrest.Matchers.is; 
import static org.junit.Assert.assertEquals; 
import static org.mockito.Matchers.any; 
import static org.mockito.Mockito.when; 
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; 
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; 
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; 
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; 

import javax.ws.rs.core.MediaType; 

import org.junit.Before; 
import org.junit.Test; 
import org.mockito.ArgumentCaptor; 
import org.mockito.Captor; 
import org.mockito.InjectMocks; 
import org.mockito.Mock; 
import org.mockito.Mockito; 
import org.mockito.MockitoAnnotations; 
import org.springframework.test.web.servlet.MockMvc; 
import org.springframework.test.web.servlet.setup.MockMvcBuilders; 

public class UserTest { 

    @InjectMocks 
    private UserController userController; 

    @Mock 
    private UserService userService; 

    @Captor 
    private ArgumentCaptor<User> userCaptor; 

    private MockMvc mockMvc; 

    @Before 
    public void setup() { 
     MockitoAnnotations.initMocks(this); 
     mockMvc = MockMvcBuilders.standaloneSetup(userController).build(); 
    } 

    @Test 
    public void testPostUser() throws Exception { 

     User user = new User(1L, "tonkatruck"); 

     when(userService.addUser(any(User.class))).thenReturn(user); 

     mockMvc.perform(post("/api/user") // 
       .contentType(MediaType.APPLICATION_JSON) // 
       .content("{\"userId\":\"1\",\"userName\":\"tonkatruck\"}")) // 
       .andExpect(jsonPath("$.userName", is(user.getUserName()))) // 
       .andExpect(status().isOk()).andDo(print()); 

     Mockito.verify(userService).addUser(userCaptor.capture()); 

     assertEquals("tonkatruck", userCaptor.getValue().getUserName()); 
    } 
} 

Maven зависимостей, используемых для теста:

<dependencies> 

     <dependency> 
      <groupId>com.jayway.restassured</groupId> 
      <artifactId>spring-mock-mvc</artifactId> 
      <version>2.6.0</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.hamcrest</groupId> 
      <artifactId>hamcrest-all</artifactId> 
      <version>1.3</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.jayway.jsonpath</groupId> 
      <artifactId>json-path</artifactId> 
      <version>2.0.0</version> 
      <scope>test</scope> 
     </dependency> 

</dependencies> 

Результат: OK

enter image description here

Смежные вопросы