Как смоделировать StreamingResponseBody в тестировании? - PullRequest
2 голосов
/ 05 апреля 2020

В моем производственном коде мне нужно выполнить команду POST для контроллера, который отвечает StreamingResponseBody . Краткий пример такого кода:

@RestController
@RequestMapping("/api")
public class DalaLakeRealController {

    @PostMapping(value = "/downloaddbcsv", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<StreamingResponseBody> downloadDBcsv(@Valid @RequestBody SearchQuery searchRequest) {
        return ResponseEntity.ok()
                .header(HttpHeaders.CONTENT_TYPE, "application/csv")
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=demoStream.csv")
                .body(
                        get3Lines()
                );
    }

    public StreamingResponseBody get3Lines() {
        StreamingResponseBody streamingResponseBody = new StreamingResponseBody() {
            @Override
            public void writeTo(OutputStream outputStream) throws IOException {
                outputStream.write("LineNumber111111111\n".getBytes());
                outputStream.write("LineNumber222222222\n".getBytes());
                outputStream.write("LineNumber333333333\n".getBytes());
            }
        };
        return streamingResponseBody;
    }
}

В тестировании я хотел бы посмеяться над ответом этого контроллера. Я прочитал следующую ссылку: Использование MockRestServiceServer для тестирования клиента REST для проверки внешних контроллеров. Но в andRespond mockServer он ожидает ClientHttpResponse или ResponseCreator

mockServer.expect(once(), requestTo("http://localhost:8080/api/downloaddbcsv"))
    .andRespond(withSuccess("{message : 'under construction'}", MediaType.APPLICATION_JSON));

Как мне ответить StreamingResponseBody in MockRestServiceServer ?

...