【发布时间】:2019-10-21 09:40:25
【问题描述】:
我正在尝试将单元测试写入处理函数,我遵循了 Spring 项目中的 example。有人可以帮我为什么下面的测试会抛出UnsupportedMediaTypeStatusException吗?
谢谢
处理函数
public Mono<ServerResponse> handle(ServerRequest serverRequest) {
log.info("{} Processing create request", serverRequest.exchange().getLogPrefix());
return ok().body(serverRequest.bodyToMono(Person.class).map(p -> p.toBuilder().id(UUID.randomUUID().toString()).build()), Person.class);
}
测试类
@SpringBootTest
@RunWith(SpringRunner.class)
public class MyHandlerTest {
@Autowired
private MyHandler myHandler;
private ServerResponse.Context context;
@Before
public void createContext() {
HandlerStrategies strategies = HandlerStrategies.withDefaults();
context = new ServerResponse.Context() {
@Override
public List<HttpMessageWriter<?>> messageWriters() {
return strategies.messageWriters();
}
@Override
public List<ViewResolver> viewResolvers() {
return strategies.viewResolvers();
}
};
}
@Test
public void handle() {
Gson gson = new Gson();
MockServerWebExchange exchange = MockServerWebExchange.from(
MockServerHttpRequest.post("/api/create")
.body(gson.toJson(Person.builder().firstName("Jon").lastName("Doe").build())));
MockServerHttpResponse mockResponse = exchange.getResponse();
ServerRequest serverRequest = ServerRequest.create(exchange, HandlerStrategies.withDefaults().messageReaders());
Mono<ServerResponse> serverResponseMono = myHandler.handle(serverRequest);
Mono<Void> voidMono = serverResponseMono.flatMap(response -> {
assertThat(response.statusCode()).isEqualTo(HttpStatus.OK);
boolean condition = response instanceof EntityResponse;
assertThat(condition).isTrue();
return response.writeTo(exchange, context);
});
StepVerifier.create(voidMono)
.expectComplete().verify();
StepVerifier.create(mockResponse.getBody())
.consumeNextWith(a -> System.out.println(a))
.expectComplete().verify();
assertThat(mockResponse.getHeaders().getContentType()).isEqualTo(MediaType.APPLICATION_JSON);
}
}
错误信息: java.lang.AssertionError:预期“expectComplete”失败(预期:onComplete();实际:onError(org.springframework.web.server.UnsupportedMediaTypeStatusException:415 UNSUPPORTED_MEDIA_TYPE“bodyType = com不支持内容类型'application / octet-stream' .example.demo.Person"))
【问题讨论】:
-
谢谢你的例子
标签: unit-testing functional-programming spring-webflux