mockito 不能将同一类中的2个Mock与不同的菱形运算符类一起使用

rbpvctlc  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(134)

我有以下的类结构。

public interface Foo<T extends Bar>{
   Optional<T> find();
}

public class A extends Bar{}

public class B extends Bar{}

@Service
@RequiredArgsConstructor
public class C{
  Foo<A> a;
  Foo<B> b;

  B bInstance = b.find();
}

public class CTest{
   @Mock
   Foo<A> a;

   @Mock
   Foo<B> b;

   @InjectMocks
   C c;

   @Test
   public void testSomething(){
      when(a.someMethod()).thenReturn(someVariable);
      when(b.someMethod()).thenReturn(someOtherVariable);
   }
}

然后我可能有一些C类的代码,比如:

B bInstance = b.find();

这里的问题是,当调用find时,它从类A而不是B返回一个新示例,即从mock a而不是mock b返回一个变量。因此,我得到了一个ClassLoadException,在后面做一些工作。
这是应该按预期工作吗?还是因为模拟了2个不同的菱形运算符类(这是怎么叫的?)(A和B)的同一个类(Foo)中的2个变量而导致Mockito无法解释的问题?我在这里遗漏了什么吗?这可能不足以做后续工作,但希望我有一些概念上的误解,并且可以很容易地修复。
提前感谢!

toiithl6

toiithl61#

那我就自己做一个测试对象

public class CTest{
   @Mock
   Foo<A> a;

   @Mock
   Foo<B> b;

// @InjectMocks  since it is not working for you, lets skip it
   C service;

   @Before
   public void setup(){
       service=new C(a,b);
   }

   @Test
   public void testSomething(){
      when(a.someMethod()).thenReturn(someVariable);
      when(b.someMethod()).thenReturn(someOtherVariable);
   }
}

相关问题