我如何模拟正在内联初始化的字段变量?
例如
class Test {
private Person person = new Person();
...
public void testMethod() {
person.someMethod();
...
}
}
在这里,我想在测试方法时测试person.someMethod() – Test#testMethod.
我需要模拟person变量的初始化.任何线索?
编辑:我不允许修改Person类.
解决方法:
Mockito附带一个助手类来为您节省一些反射锅炉板代码:
import org.mockito.internal.util.reflection.Whitebox;
//...
@Mock
private Person mockedPerson;
private Test underTest;
// ...
@Test
public void testMethod() {
Whitebox.setInternalState(underTest, "person", mockedPerson);
// ...
}
更新:
不幸的是,模拟团队决定在Mockito 2中使用remove the class.所以你回来编写自己的反射样板代码,使用另一个库(例如Apache Commons Lang),或者简单地盗窃Whitebox类(它是MIT licensed).
更新2:
JUnit 5附带了自己的ReflectionSupport和AnnotationSupport类,这些类可能很有用,可以避免您拉入另一个库.