使用Spring Cloud Contract的路由功能(reactive-webflux)

时间:2018-07-27 04:57:33

标签: spring reactive-programming spring-webflux

我正在构建一个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))  

        );
    }
}

1 个答案:

答案 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'
}