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

Java 在JUnit测试和Mockito中尝试使用when和thenReturn时出错(NullPointerException),java,android,junit,android-testing,Java,Android,Junit,Android Testing,我试图在Android Studio中创建单元测试,当我调用函数presenter.getImageFile()时,它显示的是NullPointerException @测试 public void shouldCallForErrorWhenImageFileIsNull()引发IOException{ 当(presenter.getImageFile())。然后返回(null); presenter.captureImage(); 验证(查看).cameraImageFileError();

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

@测试
public void shouldCallForErrorWhenImageFileIsNull()引发IOException{
当(presenter.getImageFile())。然后返回(null);
presenter.captureImage();
验证(查看).cameraImageFileError();
}
上面的代码来自我的测试文件,下面的代码来自Presenter类的部分

@覆盖
公共文件getImageFile()引发IOException{
String timeStamp=new SimpleDateFormat(“yyyyMMdd_HHmmss”,Locale.ENGLISH).format(new Date());
String imageName=“jpg_389;”+时间戳+“389;”;
File imageFile=File.createTempFile(imageName,.jpg,.storageDir);
setPrevImagePath(getCurrentImagePath());
setCurrentImagePath(imageFile.getAbsolutePath());
Log.d(“MainActivity#FilePath”,imageFile.getAbsolutePath());
返回图像文件;
}
执行上述代码时,我遇到以下错误:

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)
java.lang.NullPointerException
位于java.io.File。(File.java:363)
位于java.io.File$TempDirectory.generateFile(File.java:1916)
位于java.io.File.createTempFile(File.java:2010)
位于com.example.imagepicker.presenter.MainActivityPresenter.getImageFile(MainActivityPresenter.java:76)
在com.example.imagepicker.ExampleUnitTest.shouldCallForErrorWhenImageFileIsNull(ExampleUnitTest.java:49)上
这里MainActivity演示器中的第76行是:File imageFile=File.createTempFile(imageName,.jpg,.storageDir);
UnitTest中的第49行是:when(presenter.getImageFile()).thenReturn(null)

如果您试图模拟正在测试的类的整个方法,那么您可以将PowerMockito与Spy类一起使用。以下是一些例子:


如果您试图模拟正在测试的类的整个方法,那么您可以将PowerMockito与Spy类一起使用。以下是一些例子:


    • 这里的问题是,您试图模拟正在测试的类的方法的行为。你需要监视这个类,而不是嘲笑它


      只需在textClass中的presenter类初始化上方添加@Spy注释这里的问题是您试图模拟正在测试的类的方法的行为。你需要监视这个类,而不是嘲笑它

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