あなたはZuulの場合、あなたには、いくつかのコントローラとの完全なSpringコンテキストだけでなく、モックMVCをする必要がありますhttps://github.com/spring-cloud/spring-cloud-contract/issues/450
/**
* Abstraction of configuration to test contracts with external microservices which are using a zuul-gateway in between.
*
* When a provider of data only allows communication through a Zuul-Gateway, a special way to ensure valid contracts is needed.
* The Goal is to emulate the Zuul-Interception to be able to use the contracts stored within the providing service.
*
* F.e.: Consumer-Service consumes the Provider-Service, but the provider can not be called directly.
* The Consumer-Service calls an URL with a prefix consisting of the name of the gateway ("gateway") and name of the
* service (in this example "Provider-Service"). For example: http://gateway/provider/path/to/resource.
* The contract provided by Provider-Service holds only a part of the provided URL (here: "/path/to/resource").
* The resolution of "gateway" and "provider" is done within this class.
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = EmbeddedZuulProxy.class,
properties = {"server.port: 8080",
"zuul.routes.provider.path: /provider/**",
"zuul.routes.provider.service-id: provider",
"zuul.routes.provider.url: http://localhost:9090/" //the url of the provider-stub is at port 9090
},
webEnvironment = WebEnvironment.DEFINED_PORT) //defined port is important! Ribbon points to zuul, which then points to the provider-stub
@AutoConfigureMockMvc
@AutoConfigureJsonTesters
//the stub runs on fixed port 9090, so that zuul can point to it
@AutoConfigureStubRunner(ids = "<group-id>:<artifact-id>:+:stubs:9090")
@DirtiesContext
public abstract class ZuulContractBase {
}
/**
* Configuration and Setup of an embedded Zuul-Gateway.
* This way it is possible to use contracts, stored in providing service
*/
@Configuration
@ComponentScan(basePackages = "<path.to.feign.client>") //autowiring feign client
@EnableAutoConfiguration
@EnableZuulProxy
@EnableFeignClients
@RibbonClient(name = "gateway", configuration = SimpleRibbonClientConfiguration.class)
class EmbeddedZuulProxy {
@Bean
RouteLocator routeLocator(DiscoveryClient discoveryClient,
ZuulProperties zuulProperties) {
return new DiscoveryClientRouteLocator("/", discoveryClient, zuulProperties);
}
}
/**
* Ribbon Load balancer with fixed server list for "simple" pointing to localhost,
* which holds the mocked zuul-gateway
*
* f.e. a call with feign would normally look like:
* http://gateway/provider/rest/path/to/your/{url}
* which is mapped to:
* http://localhost:{zuulport}/provider/rest/path/to/your/{url}
*/
@Configuration
class SimpleRibbonClientConfiguration {
@Value("${server.port}")
private Integer zuulPort;
@Bean
public ServerList<Server> ribbonServerList() {
return new StaticServerList<>(new Server("localhost", zuulPort));
}
}
ほとんどの例があります。あなたはそのようにテストを設定していますか? –
私はDefaultMockMvcBuilderでテストを設定しています。 @Before public void setUp()throws Exception { DefaultMockMvcBuilder webAppContextSetup = MockMvcBuilders.webAppContextSetup(context); MockMvcビルド= webAppContextSetup.build(); RestAssuredMockMvc.mockMvc(ビルド); } } –
mock mvcではなく明示的なモードを使用する必要があります。そうすれば、すべてのフィルタが登録されます –