Spring:如何将@RestClientTest 与带有@Qualifier

我已经更改了一个使用 a 的 Spring Boot (2.1.4) 服务RestTemplate来使用@Qualifier. 现在我的 Test (with @RestClientTestand @AutoConfigureWebClient) 失败了,因为它无法解析 bean。


我该如何解决?


配置:


  @Bean

  @Qualifier("eureka")

  @LoadBalanced

  RestTemplate eurekaRestTemplate() {

服务:


  public ClarkClient(

      @Qualifier("eureka") RestTemplate restTemplate, ClarkConfiguration configuration)

      throws URISyntaxException {

考试:


@ExtendWith({SpringExtension.class, MockitoExtension.class})

@RestClientTest({CastorClient.class, CastorConfiguration.class})

@AutoConfigureWebClient(registerRestTemplate = true)

class CastorClientWebTest {


  @Autowired

  private CastorClient cut;


  @Autowired

  private MockRestServiceServer server;

错误:


[2019-04-16T14:02:22,614] [WARN ] [            ....AnnotationConfigApplicationContext] [refresh 557] : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'castorClient' defined in file [/home/martinsc/java/routing/route-testing-batch-manager/out/production/classes/com/tyntec/routetesting/batchmanager/core/clients/CastorClient.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.web.client.RestTemplate' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=eureka)}


萧十郎
浏览 132回答 2
2回答

当年话下

您不应该使用(registerRestTemplate = true)它,因为它会为您创建一个不是您使用的 RestTemplate bean。如果在您的 中声明了您的合格 RestTemplate bean,请CastorConfiguration尝试使用@Import(CastorConfiguration.class)

慕尼黑的夜晚无繁华

对我有用的解决方案:(@AutoConfigureWebClient没有(registerRestTemplate = true))。在@TestConfiguration类中创建一个RestTemplate具有权限的 bean@Qualifier@Bean@Qualifier("eureka")public RestTemplate eurekaRestTemplate() {  return new RestTemplate();}将其注入测试类@Autowired@Qualifier("eureka")private RestTemplate restTemplate;现在我们需要将它连接到MockRestServiceServer. 我们通过@BeforeEachprivate MockRestServiceServer server;@BeforeEach  void setUp () {    server = MockRestServiceServer.bindTo(restTemplate).build();  }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java