在JUnit测试和Mockito中使用when和thenReturn时出错(NullPointerException)。

问题描述 投票:0回答:1

我试图在Android Studio中创建单元测试,当我调用函数presenter.getImageFile()时,它显示NullPointerException。

@Test
public void shouldCallForErrorWhenImageFileIsNull() throws IOException {
    when(presenter.getImageFile()).thenReturn(null);
    presenter.captureImage();

    verify(view).cameraImageFileError();

}

上面的代码来自我的测试文件,下面的代码来自我的Presenter类的部分。

@Override
public File getImageFile() throws IOException {
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.ENGLISH).format(new Date());
    String imageName = "jpg_" + timeStamp + "_";

    File imageFile = File.createTempFile(imageName, ".jpg", storageDir);

    setPrevImagePath(getCurrentImagePath());
    setCurrentImagePath(imageFile.getAbsolutePath());
    Log.d("MainActivity#FilePath", imageFile.getAbsolutePath());

    return imageFile;
}

当执行上面的代码时,我得到了以下错误。

java.lang.NullPointerException
    at java.io.File.<init>(File.java:363)
    at java.io.File$TempDirectory.generateFile(File.java:1916)
    at java.io.File.createTempFile(File.java:2010)
    at com.example.imagepicker.presenter.MainActivityPresenter.getImageFile(MainActivityPresenter.java:76)
    at com.example.imagepicker.ExampleUnitTest.shouldCallForErrorWhenImageFileIsNull(ExampleUnitTest.java:49)

在MainActivity Presenter中的第76行是 。File imageFile = File.createTempFile(imageName, ".jpg", storageDir);而我的UnitTest中的第49行是:when(presenter.getImageFile()).thenReturn(null)。

java android junit android-testing
1个回答
0
投票

如果你试图模拟你正在测试的类的整个方法,那么你可以利用PowerMockito与Spy类。下面是一些例子。


0
投票

这里的问题是,你正在尝试模拟你正在测试的类的一个方法的行为。你需要监视类来做这件事,而不是模拟。

只需在textClass中的presenter类初始化上方添加@Spy注解。

© www.soinside.com 2019 - 2024. All rights reserved.