如何在java中使用mockito测试文件大小?
我有一个需要创建JUnit测试的方法:如何在java中使用mockito测试文件大小?,java,file,testing,junit,mockito,Java,File,Testing,Junit,Mockito,我有一个需要创建JUnit测试的方法: public class MyClass { private String file1; private String file2; public void myMethodSpaceCheck(){ if (new File(file1).size() > new File(file2).size() { throw new Exception ..... } } } 可以使用Mockito创
public class MyClass {
private String file1;
private String file2;
public void myMethodSpaceCheck(){
if (new File(file1).size() > new File(file2).size() {
throw new Exception .....
}
}
}
可以使用Mockito创建JUnit测试吗 在Java中处理文件时,我的首选选项是使用ApacheVFS,因为这样我就可以将它们视为任何其他POJO。显然,当您已经在使用文件API时,这需要做大量的工作 另一种选择是完全忘记Mockito,并在系统上写入这些文件。我通常避免这样做,因为有时在某些系统上并行运行测试会变得更加困难 对于这种特定情况,我的解决方案通常是提供一个特殊类,例如FileBuilder,它可以实例化新文件:
public class FileBuilder {
public java.io.File newFile(String pathname) {
return new java.io.File(pathname);
}
}
然后,在将该类传递给MyClass之前,我会对其进行模拟,并根据需要对其进行测试:
@Test(expected = Exception.class)
public void should_fail_when_file1_is_bigger_than_file2() {
FileBuilder mockFile1 = file(2L);
FileBuilder mockFile2 = file(1L);
FileBuilder mockFileBuilder = mock(FileBuilder.class);
when(mockFileBuilder.newFile("file1").thenReturn(mockFile1);
when(mockFileBuilder.newFile("file2").thenReturn(mockFile2);
new MyClass(mockFileBuilder).myMethodSpaceCheck();
}
private static File file(long length) {
File mockFile = mock(File.class);
when(mockFile.length()).thenReturn(length);
return mockFile;
}
(您的示例提到File.size();我假设您指的是File.length())
MyClass的实际实现如下所示:
public class MyClass {
private String file1;
private String file2;
private final FileBuilder fileBuilder;
public MyClass() {
this(new FileBuilder());
}
@VisibleForTesting
MyClass(FileBuilder fileBuilder) {
this.fileBuilder = fileBuilder;
}
public void myMethodSpaceCheck() //...
}
如何给file1和file2赋值?如果重构得到一个getSize(fileName)方法,那么测试myMethodSpaceCheck就更容易了。