Unit testing 返回新的ArrayList时,将填充正在返回的列表,但仍会出现空指针异常
我正在为一个方法编写一个JUnit测试用例,它将引导我找到另一个默认方法,当调用该默认方法时,它将返回一个新的ArrayList 试验方法Unit testing 返回新的ArrayList时,将填充正在返回的列表,但仍会出现空指针异常,unit-testing,junit,nullpointerexception,mockito,powermockito,Unit Testing,Junit,Nullpointerexception,Mockito,Powermockito,我正在为一个方法编写一个JUnit测试用例,它将引导我找到另一个默认方法,当调用该默认方法时,它将返回一个新的ArrayList 试验方法 public List getTagDataForImage(String tagType, String imageType) { List tagRules = getTagRulesForUpdateOrQueryImage(tagType, imageType); List tagData = getTagData(t
public List getTagDataForImage(String tagType, String imageType) {
List tagRules = getTagRulesForUpdateOrQueryImage(tagType, imageType);
List tagData = getTagData(tagRules);
return tagData;
}
在方法中,堆栈跟踪将我指向GetTagralesforUpdateorQueryImageTagType,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.getTagRulesForUpdateOrQueryImagetagType的定义
+,+图像类型[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)
我无法找出哪里出了问题。请帮助我解决此问题。仅从评论中提供答案:
List getTagRulesForUpdateOrQueryImage(String tagType) {
return new ArrayList((List) tagRulesMap.get(tagType));//gives NPE
}
找不到键标记类型,因此它返回null,然后尝试强制转换,然后返回NullPointerException 您的模拟TagDataFilter是否没有调用真正的构造函数?是的,它正在调用真正的构造函数。如何模拟标记列表依赖关系?我没有模拟它,因为当我调用测试类的构造函数时,会自动调用标记列表的构造函数。它是否包含您正在搜索的键的a值?如果找不到传递的键的值,ArrayList.get将返回null。。。