我如何模拟正在内联初始化的字段变量?
例如
class Test {
private Person person = new Person();
...
public void testMethod() {
person.someMethod();
...
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我想在测试方法时测试person.someMethod() - Test#testMethod.
我需要模拟person变量的初始化.任何线索?
编辑:我不允许修改Person类.
我有 2 个几乎相同的课程:
class Foo1 {
private Bar bar1;
private Bar bar2;
public void setBar1(Bar bar1) {
this.bar1 = bar1;
}
public void setBar2(Bar bar2) {
this.bar2 = bar2;
}
}
class Foo2 {
private Bar bar1;
private Bar bar2;
public Foo2(Bar bar1, Bar bar2) {
this.bar1 = bar1;
this.bar2 = bar2;
}
}
Run Code Online (Sandbox Code Playgroud)
所以这是setter vs构造函数。问题是@InjectMocks 只能与下面测试中的第一类一起正常工作:
@RunWith(MockitoJUnitRunner.class)
public class Test {
@Mock
private Bar bar1;
@Mock
private Bar bar2;
@InjectMocks
private Foo1 sut;
}
Run Code Online (Sandbox Code Playgroud)
要测试第二个类,我必须手动进行,因为对于两个 Bar 参数,@InjectMocks 选择了相同的模拟(这是随机选择)
@RunWith(MockitoJUnitRunner.class) …Run Code Online (Sandbox Code Playgroud) 我有一个需要测试的类,它有两个不同类但接口相同的实例。这是代码的样子,
要测试的类:
@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 都是空的,因为它们没有被模拟。当接口只有一个实现时,这不会发生。
知道如何处理吗?
谢谢,安吉洛