Dem*_*ian 5 java junit spring unit-testing mockito
我有一个需要测试的类,它有两个不同类但接口相同的实例。这是代码的样子,
要测试的类:
@Service
public class MainClass {
@Resource(name = "aClass")
private IClass instance1;
@Resource(name = "bClass")
private IClass instance2;
}
Run Code Online (Sandbox Code Playgroud)
其他类:
@Service("aClass")
public class A implements IClass {}
@Service("bClass")
public class B implements IClass {}
Run Code Online (Sandbox Code Playgroud)
我的单元测试:
public MainClassTest {
@InjectMocks
private MainClass mainClass;
@Mock
private IClass instance1;
@Mock
private IClass instance2;
@Test
public void test() {...}
}
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,instance1 和 instance2 都是空的,因为它们没有被模拟。当接口只有一个实现时,这不会发生。
知道如何处理吗?
谢谢,安吉洛
@InjectMocks是一条捷径,它告诉 Mockito 实例化您MainClass并尝试通过构造函数注入或 setter 注入或属性注入(按顺序,IIRC)之一注入模拟。
我认为您所看到的行为可能是 Mockito 的已知行为;这里有一个未解决的问题描述了Mockito 对相同模拟类型的@InjectMocks两个实例的处理。
因此,与其依赖它,您还可以创建MainClass“老式”方式的实例,例如在@Before方法中。例如:
private MainClass mainClass;
@Before
public void setup() {
IClass instance1 = mock(IClass.class);
IClass instance2 = mock(IClass.class);
mainClass = new MainClass(instance1, instance2);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9624 次 |
| 最近记录: |