不能将来自相同 class 的 2 个模拟与不同的菱形运算符 classes 一起使用

Can't use 2 Mocks from the same class with different diamond operator classes

我有以下 classes 结构。

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);
   }
}

那么也许我在 class C 中有一些代码,例如:

B bInstance = b.find();

这里的问题是,当调用 find 时,它 returns 来自 class A 而不是 B 的新实例,即来自 mock a 而不是 mock b 的变量。因此,之后我得到一个 ClassLoadException 做一些工作。

这是否应该按预期工作,或者它是否是由模拟来自 2 个不同钻石运算符 classes 的相同 class (Foo) 的 2 个变量引起的问题(这怎么称呼? ) (A 和 B) Mockito 无法解释? 我在这里还缺少其他东西吗? 这可能没有足够的信息来进行后续操作,但希望我有一些概念上的误解并且可以轻松解决。

提前致谢!

然后我会自己创建测试对象

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);
   }
}