Как проверить ответ json, возвращаемый конечной точкой контроллера покоя - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь проверить свой контроллер покоя, у меня в контроллере есть следующий метод:

@PostMapping("/auth/signup")
public ResponseEntity<RestResponse> registerUser(@Valid @RequestBody SignUpRequest signUpRequest,
                                                     UriComponentsBuilder uriComponentsBuilder)  {
    RestResponse restResponse = this.userService.register(signUpRequest);
    UriComponents uriComponents = uriComponentsBuilder.path("/users").buildAndExpand();
    return ResponseEntity.created(uriComponents.toUri()).body(restResponse);
}

Когда я запускаю конечную точку в почтальоне, я получаю следующий ответ:

{
    "status": "Created",
    "code": 201,
    "message": "User registered successfully",
    "result": "5bcf8a0487b89823a8ba5628"
}

в моем тестовом классе у меня есть следующее:

@RunWith(MockitoJUnitRunner.class)
public class UserControllerTest {

    private MockMvc mockMvc;
    @Mock
    private UserService userService;
    @InjectMocks
    private UserController userController;
    private SignUpRequest signUpRequest;
    private String signupJson;

    @Before
    public void setUp() {
        // initialise signUpRequest object with dummy data
        this.signUpRequest = DummyData.dummySignupRequest();
        // initialise signUpRequest object with dummy data
        this.signupJson = "{\"name\":\"Ayoub Khial\",\"email\":\"Ayouub.Khial@gmail.com\",\"password\":\"123456\"}";

        mockMvc = MockMvcBuilders.standaloneSetup(userController).build();
    }

    @Test
    public void justATest() throws Exception {
        RestResponse restResponse = new RestResponse<>(HTTPCode.CREATED.getValue(), HTTPCode.CREATED.getKey(),
                "User registered successfully", null);
        given(this.userService.register(this.signUpRequest)).willReturn(restResponse);

        MockHttpServletResponse response = mockMvc.perform(post("/api/auth/signup")
                        .contentType(MediaType.APPLICATION_JSON)
                .content(signupJson))
                .andReturn()
                .getResponse();
        System.out.println(response.getContentAsString());

    }
}

Когда я регистрирую response.getStatus(), я получаю 201, что правильно, но если я проверяю response.getContentAsString(), я получаю пустую строку.
Итак, вопрос здесь, как проверить JSON в ответе?

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Вы используете фальшивый фреймворк, поэтому вам нужно указать, что возвращать.

ваш restResponse не содержит никакого содержимого

0 голосов
/ 24 октября 2018

Вот мой код с использованием HttpURLConnection и JSONObject, возможно, он может вам помочь

private static String getStringResponse() throws Exception {

    URL url = new URL("/api/auth/signup");
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setRequestMethod("POST");
    con.setRequestProperty("User-Agent", "Mozilla/5.0");
    con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
    con.setDoOutput(true);  // Send post request

    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.flush();
    wr.close();

    // int responseCode = con.getResponseCode();
    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();
    con.disconnect();

    return response.toString();
}

public static void main(String[] args) {
    String response = getStringResponse();
    JSONObject json = new JSONObject(response);
}
0 голосов
/ 24 октября 2018

попробуйте использовать:

response.getBody()

, чтобы получить ответ JSON

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...