在模拟对象中设置私有字段

在你正在测试的类中,你可能有一些私有字段,即使通过构造函数也无法访问。在这种情况下,你可以使用反射来设置此类属性。这是来自此类 JUnit 测试的片段。

@InjectMocks
private GreetingsService greetingsService = new GreetingsService(); // mocking this class

@Before
public void setUp() {
    MockitoAnnotations.initMocks(this);
    String someName = "Some Name";
    ReflectionTestUtils.setField(greetingsService, // inject into this object
        "name", // assign to this field
        someName); // object to be injected
}

我在这里使用 Sptring 的 ReflectionTestUtils.setField(Object targetObject, String name, Object value) 方法来简化,但你可以使用普通的旧 Java Reflection 来做同样的事情。