不能将来自相同 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);
}
}
我有以下 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);
}
}