在 for 循环中使用模拟对象列表获取 NullPointerException
Getting NullPointerException on using List of mocked Object in a for loop
要模拟的函数是 class 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;
}
这是测试:
@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"));
}
我在 运行 这个测试中得到了 NullPointerException
。原因是node的for循环里面的值是null
。这似乎是因为 List
在 java 中的工作方式。有什么解决方法吗?
您需要将模拟节点添加到设置方法中的列表中。
@Before
public void setup() throws Exception
{
mockListOfNodes = Arrays.asList(mockNode, mockNode, mockNode);
when(mockN.getListofNodes()).thenReturn(mockListofNodes);
}
要模拟的函数是 class 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;
}
这是测试:
@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"));
}
我在 运行 这个测试中得到了 NullPointerException
。原因是node的for循环里面的值是null
。这似乎是因为 List
在 java 中的工作方式。有什么解决方法吗?
您需要将模拟节点添加到设置方法中的列表中。
@Before
public void setup() throws Exception
{
mockListOfNodes = Arrays.asList(mockNode, mockNode, mockNode);
when(mockN.getListofNodes()).thenReturn(mockListofNodes);
}