我有下面的類如何注入模擬,而無需使用@injectmocks
public class One {
private Map<String, String> nodes = new HashMap<String, String>();
public void addNode(String node, String nodefield){
this.nodes.put(node, nodefield);
}
}
我想編寫一個測試類來測試ADDNODE方法有以下幾種:
@RunWith(MockitoJUnitRunner.class)
public class OneTest {
@InjectMocks
private One one = new One();
@Mock
Map<String, String> nodes;
@Test
public void testAddNode(){
one.addNode("mockNode", "mockNodeField");
Mockito.verify(nodes).put("mockNode","mockNodeField");
}
}
其中工程。但我不知道是否有一種方法可以做到這一點,而無需使用@InjectMocks像下面
public class OneTest {
private One one;
@Test
public void testAddNode(){
Map<String, String> nodes = Mockito.mock(Map.class);
one = Mockito.injectmocks(One.class, nodes); // or whatever equivalent methods are
one.addNode("mockNode", "mockNodeField");
Mockito.verify(nodes).put("mockNode","mockNodeField");
}
}
你真正需要的是一個反射實用程序來訪問私有財產。一旦你訪問他們,然後你可以使用間諜或模擬。間諜更好,因爲你只是想專注於一個實例。如果你仍然使用1.x版本,Mockito有內部類白盒。如果你碰巧使用Spring,Spring有ReflectionUtil。 – Baski
我最近重新討論了這個問題,發現ReflectionTestUtils是一個更好的解決方案。我在這裏找到了很好的閱讀材料,並希望分享:http://mrhaki.blogspot.com/2010/09/private-spring-dependency-injections.html。我試圖遠離PowerMock,因爲我讀到這不是最佳實踐。謝謝(你的)信息! – dejonathan