Junit测试:模拟文件操作

4
我有一段代码和下面的示例类似,现在我被要求用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个回答

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)以进行验证。


MyClass类将不会知道您在生产中创建的file - IgorGanapolsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接