我有以下的类结构。
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无法解释的问题?我在这里遗漏了什么吗?这可能不足以做后续工作,但希望我有一些概念上的误解,并且可以很容易地修复。
提前感谢!
1条答案
按热度按时间toiithl61#
那我就自己做一个测试对象