我已经编写了一个 Spring 函数,并且能够运行 junit 来验证函数。但是,如果我尝试运行 junit 来测试与 Http 端点相同的功能,则会引发以下错误。
java.lang.AssertionError: Status expected:<200 OK> but was:<404 NOT_FOUND>
函数 Bean 如下所示:
@Slf4j
@Configuration
@RequiredArgsConstructor
public class RetryFunction {
private final RetryExecutor retryExecutor;
@Bean
public Function<Message<Request>, Message<Response>> executeRetryJob() {
return request -> {
log.info("Received [request : {}]",request);
retryExecutor.executeJob(request.getPayload());
var response = Response.builder()
.message(request.getPayload().getName().concat("submitted successfully."))
.build();
return MessageBuilder.withPayload(response).build();
};
}
}
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Request {
private String name;
}
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Response {
private String message;
}
失败的 Junit 代码如下所示:
@WebFluxTest
@ContextConfiguration(classes = RetryFunction.class)
class JobExecutionFunctionTest {
@MockBean
private RetryExecutor retryExecutor;
@Autowired
private WebTestClient webTestClient;
@Test
void shouldReturnSuccessResponseWithHttpStatus200() {
var randomRequest = Request.builder().name(randomAlphanumericString(10)).build();
var requestMessage = MessageBuilder.withPayload(randomRequest).build();
var randomResponse = Response.builder()
.response(randomRequest.getName().concat("submitted successfully."))
.build();
var expectedResponseMessage = MessageBuilder.withPayload(randomResponse).build();
doNothing().when(retryExecutor).executeJob(randomRequest);
webTestClient.post()
.uri("/executeRetryJob")
.body(Flux.just(requestMessage),Message.class)
.exchange()
.expectStatus().isOk()
.expectBody(Message.class).isEqualTo(expectedResponseMessage);;
}
}
在junit之上运行时,抛出以下错误
java.lang.AssertionError: Status expected:<200 OK> but was:<404 NOT_FOUND>
> POST /executeRetryJob
> WebTestClient-Request-Id: [1]
> Content-Type: [application/json]
[{"payload":{"job_name":"os2zazNuIm"},"headers":{"id":"69f63243-0c6f-c911-4b77-ee39cadf3f42","timestamp":1609417585159}}]
< 404 NOT_FOUND Not Found
< Content-Type: [application/json]
< Content-Length: [130]
{"timestamp":"2020-12-31T12:26:25.461+00:00","path":"/executeRetryJob","status":404,"error":"Not Found","requestId":"31d47bd8"}
有什么建议为什么会出现这个错误?