返回一个新的ArrayList,将填充正在返回的列表,但仍会提供空指针异常

时间:2017-04-12 10:07:34

标签: unit-testing junit nullpointerexception mockito powermockito

我正在为一个方法编写一个JUnit测试用例,该方法将我引导到另一个默认方法,它在调用默认方法时返回一个新的ArrayList。

测试方法

public List getTagDataForImage(String tagType, String imageType) {
        List tagRules = getTagRulesForUpdateOrQueryImage(tagType, imageType);
        List tagData = getTagData(tagRules);
        return tagData;
    }

在方法中,堆栈跟踪将我指向getTagRulesForUpdateOrQueryImage(tagType, imageType);,这引导我到这里

List getTagRulesForUpdateOrQueryImage(String tagType, String imageType) {
        List commonList = tagList.getTagRulesForUpdateOrQueryImage(tagType
                + "," + imageTypes[0]); //This line 
        commonList.addAll(tagList.getTagRulesForUpdateOrQueryImage(tagType
                + "," + imageType));
        return commonList;
    }

在另一个类

中定义的tagList.getTagRulesForUpdateOrQueryImage(tagType + "," + imageTypes[0]);的定义
List getTagRulesForUpdateOrQueryImage(String tagType) {
        return new ArrayList((List) tagRulesMap.get(tagType));//gives NPE
    }

tagRulesMap是一个在构造函数调用

时自动填充的HashMap

测试用例

@InjectMocks 
    TagDataFilter tagDataFilter;
    @Test
        public void testGetTagDataForImage()
        {
            List get=tagDataFilter.getTagDataForImage("QueryImages", "Common");
        }

堆栈跟踪

java.lang.NullPointerException
    at java.util.ArrayList.<init>(Unknown Source)
    at data.TagList.getTagRulesForUpdateOrQueryImage(TagList.java:107)
    at data.TagDataFilter.getTagRulesForUpdateOrQueryImage(TagDataFilter.java:92)
    at data.TagDataFilter.getTagDataForImage(TagDataFilter.java:73)
    at data.test.TagDataFilterTest.testGetTagDataForImage(TagDataFilterTest.java:54)

我无法弄清楚我哪里出错了。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

只是提供评论的答案:

List getTagRulesForUpdateOrQueryImage(String tagType) {
    return new ArrayList((List) tagRulesMap.get(tagType));//gives NPE
}

找不到密钥tagType,因此返回null,然后尝试进行转换,然后返回NullPointerException。