在模擬物件中設定私有欄位

在你正在測試的類中,你可能有一些私有欄位,即使通過建構函式也無法訪問。在這種情況下,你可以使用反射來設定此類屬性。這是來自此類 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 來做同樣的事情。