【发布时间】:2018-10-04 20:50:23
【问题描述】:
我正在尝试使用 spring 云合同和使用 spring 5 路由的休息服务,但它不起作用。 我在客户端,我正在尝试在 junit 测试中使用存根运行器。 如果我使用经典的@RestController 和flux,它可以正常工作,但如果我尝试使用RouterFunction 更改控制器,它不起作用并且我得到404。 这是我的示例代码。
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
...
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-contract-stub-runner</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
路由.java
@Configuration
@EnableWebFlux
public class Routing {
@Autowired
private TestLoginController loginController;
@Bean
public HttpHandler routerFunction() {
return WebHttpHandlerBuilder
.webHandler(RouterFunctions.toWebHandler(createRouterFunction()))
.build();
}
private RouterFunction<ServerResponse> createRouterFunction() {
return route(POST("/testlogin"), loginController::testLogin);
}
}
TestLoginController.java
@Component
public class TestLoginController {
@Autowired
private TestLoginService testLoginService;
public Mono<ServerResponse> testLogin(ServerRequest request) {
return Mono.just(request)
.flatMap(req -> ServerResponse.ok()
.body(testLoginService.testLogin(request.bodyToMono(LoginRequest.class)), LoginResponse.class)
);
}
}
DemoApplicationTest.java
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureStubRunner(ids = {"groupId:artifactId:+:stubs:8090"},
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
public class DemoApplicationTests {
@LocalServerPort
private int port;
@Test
public void contextLoads() throws Exception {
LoginRequest request = new LoginRequest();
WebTestClient
.bindToServer()
.baseUrl("http://localhost:" + port)
.build()
.post()
.uri("testlogin").accept(MediaType.APPLICATION_JSON)
.body(BodyInserters.fromObject(request))
.exchange()
.expectStatus().isOk()
.expectBody()
....
}
}
即使我删除了@AutoConfigureStubRunner 注释,我也会遇到同样的问题。如果我只添加存根运行器依赖项,我会发现这种行为我发现了这个问题。 我也尝试使用最新版本的 spring boot 和 spring cloud contract,但我有同样的问题。谁能帮帮我?
【问题讨论】:
-
我删除了@AutoConfigureStubRunner,它在路由上运行良好。
-
好的,但是你是如何使用存根运行器的?我需要使用存根来进行消费者测试
标签: java spring spring-boot spring-webflux spring-cloud-contract