Тестирование контроллера, который возвращает ответную сущность - PullRequest
0 голосов
/ 02 октября 2019

У меня есть следующий контроллер, который принимает почтовый запрос и возвращает объект ответа с телом

@RestController
public class UserController {
    @Autowired
    private UserService UserService;
    @RequestMapping(value = "/all", method = POST,consumes = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<List<ResponseUser>> navigationTree(@RequestBody(required=false) UserDataRequest request) {
        return UserService.sendEntries(request);
    }
}

Это тест, который я написал для него:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {

    private MockMvc mockMvc;

    @MockBean
    private UserService UserServiceMock;

    @Autowired
    private WebApplicationContext webApplicationContext;

    @Before
    public void setUp() {
        this.mockMvc = webAppContextSetup(webApplicationContext).build();
    }

    @Test
    public void returnTopLevel() throws Exception {


        String expectedJson = "[{\"id\":\"11\",\"name\":\"11\"},{\"id\":\"22\",\"name\":\"22\"}]";
        MvcResult result = this.mockMvc.perform(post("/all")
                 .contentType(MediaType.APPLICATION_JSON)
                 .content("")
                 .accept(MediaType.APPLICATION_JSON))
                 .andExpect(status().isOk()).andReturn();

        String actualJson = result.getResponse().getContentAsString();

       // System.out.println(result);

        //assertThat(Objects.equals(expectedJson, actualJson)).isTrue();

         verify(UserServiceMock,times(1)).sendEntries(null);

    }
}

Я хочу сравнитьстрока, полученная в теле ответа на ожидаемую строку.

  1. Я попытался сравнить строку, но она не работает

Ошибки:

    assertThat(Objects.equals(expectedJson, actualJson)).isTrue();

и actualjson равенпусто.

Каковы другие способы?

1 Ответ

1 голос
/ 02 октября 2019

Вам нужно смоделировать UserService, чтобы вернуть что-то перед выполнением this.mockMvc.perform. Примерно так:

when(UserServiceMock.sendEntries(null)).thenReturn(expectedResponceEntity);

Так что просто создайте ожидаемый ответ, а затем смоделируйте UserService, чтобы вернуть его.

...