Mock File类和NullPointerException

man*_*war 9 java junit mocking mockito

我正在使用Mockito创建一个File mock对象,它将用作存储新File的目录.

Folder folder = Mockito.mock(File.class);
File file = new Agent().createNewFile(folder, "fileName");
Run Code Online (Sandbox Code Playgroud)

在我的Agent类中:

public File createNewFile(File folder, String filename){
    return new File(folder, "testfile");
}
Run Code Online (Sandbox Code Playgroud)

但是当我在文件内部创建新文件时,我在File的初始化块中得到一个NullPointerException createNewFile:

java.lang.NullPointerException at java.io.File.<init>(File.java:308)
Run Code Online (Sandbox Code Playgroud)

我认为这是因为File没有任何空构造函数,因此在模拟对象时,某些内部状态保持为null.

我采取了错误的方法嘲笑File folder对象吗?我的目标是在创建新文件之前检查一些约束,但我不想依赖文件系统上现有的真实文件夹.

谢谢.

Ank*_*sal 8

您需要为文件夹内部调用的文件夹定义getPath()的行为.

你可以这样做:

File folder = Mockito.mock(File.class);
when(folder.getPath()).thenReturn("C:\temp\");
File file = new Agent().createNewFile(folder, "fileName");
Run Code Online (Sandbox Code Playgroud)

只有在你没有真正创建新文件但只调用新文件时它才会起作用.