java – Mockito:模拟私有字段初始化

我如何模拟正在内联初始化的字段变量?

例如

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附带了自己的ReflectionSupportAnnotationSupport类,这些类可能很有用,可以避免您拉入另一个库.

上一篇:java – 使用参数模拟构造函数


下一篇:PowerMockito,Mockito private 方法的mock和test