繁体   English   中英

带有Mockito的JUnit测试用例抛出NullPointerException

[英]JUnit test case with Mockito throws NullPointerException

我正在使用Mockito编写JUnit测试用例,并且得到了NullPointerException。

商业代码

public XRImage getImage(String imgId, List tagList) {
    _paramsMap.printContent();
    return _paramsMap.getImage(imgId, tagList);
}

测试代码

@Test
public void getImageTest() {
    String imgId = new String("Test");
    List requiredTags = null;
    XRImage xRImage = Mockito.mock(XRImage.class);
    ImageParamsMap imageParamsMap = Mockito.mock(ImageParamsMap.class);
    imageParamsMap.addImage(imgId);
    when(imageParamsMap.getImage(imgId, requiredTags)).thenReturn(Mockito.mock(XRImage.class));
    XRImage getImage1 = acquisitionParamsManager.getImage(imgId, requiredTags);
    assertNotNull(getImage1);
}

简单:

List requiredTags = null;

...

XRImage getImage1=acquisitionParamsManager.getImage(imgId,requiredTags);

您正在为该列表传递null 请尝试使用一个列表。 如果那是一个java.util.List; 您实际上是在创建原始通用类型; 而您应该宁愿做类似List<Whatever>事情!

您是否希望使用imageParamsMap模拟对象代替_paramsMap实例变量?

如果是这样,您将需要以某种方式设置imageParamsMapacquisitionParamsManager调用方法之前。 例如,假设有一个setter可用:

acquisitionParamsManager.setParamsMap(imageParamsMap);
XRImage getImage1 = acquisitionParamsManager.getImage(imgId, requiredTags);

如果没有可用的setter,模拟注入将是另一种选择。 除此之外,在没有其他代码和/或行号引发异常的情况下很难进行调试。


无关,但是在addImage()调用addImage()实际上并不会完成任何事情。 如果要验证是否调用了此方法,请尝试在断言之后添加以下语句:

verify(imageParamsMap).addImage(imgId);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM