moh*_*hit 2 java junit mockito
要模拟的函数是类NegotiateNode
:
protected String getAttributeValueFromNodeOfServiceType(String serviceType, String attributeName) {
String attributeValue = null;
for (Node node : this.getListOfNodes()) {
if (node.getServiceType().equals(serviceType)) {
attributeValue = node.getAttribute(attributeName);
break;
}
}
return attributeValue;
}
Run Code Online (Sandbox Code Playgroud)
这是测试:
@Mock private NegotiateNode mockN;
@Mock private Node mockNode;
private List<Node> mockListOfNodes = Arrays.asList(mockNode, mockNode, mockNode);
@Before
public void setup() throws Exception
{
when(mockN.getListofNodes()).thenReturn(mockListofNodes);
}
@Test
public void getAttributeValueFromNodeOfServiceType_ServiceTypeExists_ReturnAttribute() {
when(mockNode.getServiceType()).thenReturn("PMN", "AMC", "SMC");
when(mockNode.getAttribute(anyString()).thenReturn("mockedValue");
when(NegotiateNode.getAttributeValueFromNodeOfServiceType(anyString(), anyString())).thenCallRealMethod();
assertEquals("mockedValue", mockN.getAttributeValueFromNodeOfServiceType("AMC", "dummyAttribute"));
}
Run Code Online (Sandbox Code Playgroud)
我正在NullPointerException
运行这个测试。原因是在 node 的 for 循环内部值为null
。这似乎是因为List
在 java中的工作方式。有什么解决方法吗?
您需要将 mockNodes 添加到 setup 方法内的列表中。
@Before
public void setup() throws Exception
{
mockListOfNodes = Arrays.asList(mockNode, mockNode, mockNode);
when(mockN.getListofNodes()).thenReturn(mockListofNodes);
}
Run Code Online (Sandbox Code Playgroud)