alibaba/testable-mock

当某个类依赖2个含有相同方法签名的类时,定义局部Mock,会出现方法签名冲突的问题。

goldbrown opened this issue · 1 comments

例如,CService依赖AMapper和BMapper,代码如下

AMapper {
  A selectById();
}


BMapper {
  B selectById();
}

CService {
  void doSomething() {
     a.selectById();
     b.selectById();
  }
}

单测的Mock写法:

    public static class Mock {

        @MockInvoke(targetClass = AMapper.class)
        public A selectById() {
        }

        @MockInvoke(targetClass = BMapper.class)
        public B selectById() {
        }
    }

会提示public A selectById()方法定义和public B selectById()方法定义冲突。

这种情况需要用到@MockInvoke注解的targetMethod参数,比如:

    public static class Mock {

        @MockInvoke(targetClass = AMapper.class, targetMethod = "selectById")
        public A selectByIdForA() {
        }

        @MockInvoke(targetClass = BMapper.class, targetMethod = "selectById")
        public B selectByIdForB() {
        }
    }

使用targetMethod参数后,Mock方法本身可以随意命名。