Junit测试模拟文件操作

时间:2012-02-02 00:24:04

标签: java spring file-io junit4 easymock

我有一段类似于下面的代码,我被要求进行Junit测试。我们正在使用Junit,EasyMock和Spring Framework。我没有做过多少Junit测试,而且我对如何模仿下面的内容感到有点迷茫。

基本上,当我在我的机器上编写或运行测试时,文件的路径就像它所在的目录一样。我想知道有没有办法将对象模拟到临时位置,因为它实际运行的位置保证存在并在集成测试期间进行测试。

但是我想知道这样做是否明智,或者当目录实际存在时,如果与项目的其余部分集成,则应该对此进行测试。

任何帮助表示赞赏,因为Junit测试对我来说是全新的。我环顾四周但看不出怎样做我想要的东西(可能是一个很好的提示,我不应该这样做:P)。

String fileName = pathToFileName;

File file = new File(fileName);

if (file.exists()) {

    FileUtil.removeLineFromFile(file, getValueToRemove(serialNumber));
}

1 个答案:

答案 0 :(得分:3)

第一个选项是将文件注入到您的类中,您可以直接注入模拟。通常是更好的选择,但并不总是优雅或可行。

通过为诸如此类的有问题的对象创建受保护的包装函数,我已经从这些事情中获得了一些好处。在你的课堂上测试:

protected File OpenFile(String fileName) { return new File(filename;}

在测试课程中:

File file = EasyMock.createNiceMock(File.class);

private MyClass createMyClass() {
  return new MyClass() {
    @Override protected File OpenFile(String fileName) { return file; }
  };
}

@Test public testFoo() {
  EasyMock.expect(file.exists()).andStubReturn(true);
  //...
  MyClass myClass=createMyClass();
  // ...
}

如果需要,可以在这种情况下保存构造参数(fileName)以进行验证。

相关问题