apache / dubbo-spring-boot-project

Spring Boot Project for Apache Dubbo
https://dubbo.apache.org
Apache License 2.0
5.41k stars 1.88k forks source link

spring-boot-test @MockBean 对 dubbo-reference 失效 #802

Closed vergilyn closed 2 years ago

vergilyn commented 2 years ago

dubbo: 2.7.13 spring-boot: 2.2.11.RELEASE dubbo-spring-boot: 2.7.13

问题描述

@SpringBootTest(classes = DubboConsumerApplication.class,
        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestPropertySource(properties = {
        "dubbo.consumer.scope = local"
        , "dubbo.consumer.check = false"
})
public class DubboMockitoTests {

    @SpyBean
    private ConsumerMockitoService consumerMockitoService;
    @MockBean
    private ProviderService providerService;

    @SneakyThrows
    @Test
    public void mock(){
        // 能达到mock的效果,只是代码不够友好
        // final Field field = ReflectionUtils.findField(consumerMockitoService.getClass(), "providerService");
        // field.setAccessible(true);
        // field.set(consumerMockitoService, providerService);

        Mockito.when(this.providerService.sayHello(ArgumentMatchers.any())).thenReturn("mock-say-hello");

        final String result = consumerMockitoService.sayHello("vergilyn");

        System.out.println("consumer sayHello >>>> resp: " + result);
    }

    @Service
    public static class ConsumerMockitoService {
        @DubboReference(version = "1.0.0", check = false)
        private ProviderService providerService;

        public String sayHello(String name){
            return providerService.sayHello(name);
        }
    }
}

以上代码无法正常mock ConsumerMockitoService中的 providerService。 虽然可以通过 反射 修改,达到mock-bean的目的,但是代码不够友好。

org.apache.dubbo.rpc.RpcException: Service [com.vergilyn.examples.dubbo.service.ProviderService:1.0.0] not found.
    .....

相关问题

(spring-cloud-openFeign 也出现过,是由于spring-boot高版本带来的问题) Spring-Boot, Behavior changed of MockBean in spring-boot-2.2.7

Spring-Cloud, Add FactoryBean.OBJECT_TYPE_ATTRIBUTE to registered beans:最终是由spring-cloud解决,版本在Hoxton.BUILD-20200515.034536-2455以上(发布版本貌似是 Hoxton.SR5+)

@MockBean on feign client is not working:由于上面一个问题造成