我正在构建一个Spring Webflux项目,在该项目中,我已实现路由功能作为具有Spring客户驱动合同的控制器。 在执行测试用例的过程中,我遇到了问题,但是我在任何地方都找不到关于此的任何解决方案。 我的要求是执行生成的测试并为n no加载应用程序上下文。测试。下面是示例代码:
==========Base class===========
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)
public class GetBase extends SampleParentBase{
protected MockMvc mvc ;
@MockBean
private PersonService service;
@MockBean
private ServerRequest request;
@Before
public void setup() throws Exception {
mvc = MockMvcBuilders
.webAppContextSetup(context).build();
}
}
============groovy file==================
Contract.make {
description "."
request {
method GET()
urlPath('/person/1')
headers {
contentType(applicationJson())
header('''Accept''', applicationJson())
}
}
response {
headers {
contentType(applicationJson())
}
status 200
bodyMatchers {
jsonPath('$.name', byType())
jsonPath('$.age', byType())
jsonPath('$.pId', byType())
}
body ('''{
"name":"string",
"age":20,
"pId":"string"
}''')
}
}
=======================Router Configuration====================
@Configuration
public class RoutesConfiguration {
@Autowired
PersonRespository personRespository;
@Bean
RouterFunction<?> routes() {
return nest(path("/person"),
route(RequestPredicates.GET("/{id}"),
request -> ok().body(personRespository.findById(request.pathVariable("id")), Person.class))
.andRoute(method(HttpMethod.GET),
request -> ok().body(personRespository.findAll(), Person.class))
);
}
}
答案 0 :(得分:1)
我们已经更新了快照文档,以包含有关如何使用Web Flux的信息。您可以在https://cloud.spring.io/spring-cloud-contract/2.0.x/single/spring-cloud-contract.html#_working_with_web_flux处进行检查,这里还有一个Web Flux https://github.com/spring-cloud-samples/spring-cloud-contract-samples/tree/master/producer_webflux的示例。为了方便起见,让我复制文档的一部分
Spring Cloud Contract需要在生成的测试中使用EXPLICIT模式才能与Web Flux一起使用。
行家。
new Vue()
等级。
<plugin>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-maven-plugin</artifactId>
<version>${spring-cloud-contract.version}</version>
<extensions>true</extensions>
<configuration>
<testMode>EXPLICIT</testMode>
</configuration>
</plugin>
以下示例显示了如何为Web Flux设置基类和“确保放心”:
contracts {
testMode = 'EXPLICIT'
}