如何使用Java中的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创建该Junit测试?

在处理Java中的文件时,我首选的选项是使用Apache VFS,因为我可以将它们视为任何其他POJO。显然,当您已经陷入文件API时,这是很多工作。

另一个选择是完全忘记Mockito并将这些文件写在系统上。我通常避免这种情况,因为有时会使某些系统并行进行测试变得更加困难。

在这种特定情况下,我的解决方案通常是要提供一个特殊类,例如,可以实例化新文件:

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() //...
}

相关内容

  • 没有找到相关文章