当前位置:  开发笔记 > 编程语言 > 正文

包含文件系统调用的单元测试方法

如何解决《包含文件系统调用的单元测试方法》经验,为你挑选了1个好方法。

我有一个方法,我想单元测试,其中有文件系统调用,我想知道如何去做.我已经查看了具有文件系统依赖性的单元测试代码,但它没有回答我的问题.

我正在测试的方法看起来像这样(c#)

public void Process(string input)
{
    string outputFile = "output.txt";
    this.Transform(input, Resources.XsltFile, outputFile);
    if ((new FileInfo(outputFile)).Length == 0)
    {
        File.Delete(outputFile);
    }
}

我正在模拟Transform(..)方法不向文件输出任何内容,因为我正在对Process方法进行单元测试而不是Transform(..)方法,因此不存在output.txt文件.因此if检查失败.

我该怎么做呢?我应该在文件io周围创建一些包装器,我也会模拟出来吗?



1> Dan Vinton..:

编辑我在你添加C#之前回答了问题(或者我错过了它)所以我的答案有点像java-esque,但原则是一样的......


你对文件IO包装器的想法很好.这是一个这样的例子,但类似的任何东西都可以:

interface FileProvider {
    public Reader getContentReader(String file);
        // notice use of the Reader interface
        //   - real-life returns a FileReader;
        //   - testing mock returns a StringReader;


    public FileInfo getFileInfo(String path);
        // easy to mock out...
}

class Processor {

    private FileProvider fileProvider;

    public void setFileProvider(FileProvider provider) { 
        this.provider = provider; 
    }

    public void process(String input) {
        // use this.fileProvider for all filesystem operations...
    }
}

这是依赖注入的一个例子- 一种易于测试的常见模式:

在测试时,您可以使用像NMock这样的模拟框架来模拟测试FileProvider实现;

在运行时,您只需插入实际的实现.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有