【问题标题】:Junit Testing Mocking a File OperationJunit 测试模拟文件操作
【发布时间】:2012-02-02 00:24:03
【问题描述】:

我有一段类似于下面的代码,我被要求进行 Junit 测试。我们正在使用 Junit、EasyMock 和 Spring 框架。我没有做太多的 Junit 测试,对于如何模拟下面的内容有点迷茫。

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

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

感谢任何帮助,因为 Junit 测试对我来说是全新的。我环顾四周,但看不到如何做我想做的事(可能是一个很好的暗示,我不应该这样做:P)。

String fileName = pathToFileName;

File file = new File(fileName);

if (file.exists()) {

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

【问题讨论】:

    标签: java spring file-io junit4 easymock


    【解决方案1】:

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

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

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

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

    【讨论】:

    • MyClass 类将不知道您在生产中创建的file。
    猜你喜欢
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多