Fad*_*oof 4 file-io unit-testing
我有一个方法,我想单元测试,其中有文件系统调用,我想知道如何去做.我已经查看了具有文件系统依赖性的单元测试代码,但它没有回答我的问题.
我正在测试的方法看起来像这样(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);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在模拟Transform(..)方法不向文件输出任何内容,因为我正在对Process方法进行单元测试而不是Transform(..)方法,因此不存在output.txt文件.因此if检查失败.
我该怎么做呢?我应该在文件io周围创建一些包装器,我也会模拟出来吗?
编辑我在你添加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...
}
}
Run Code Online (Sandbox Code Playgroud)
这是依赖注入的一个例子- 一种易于测试的常见模式:
在测试时,您可以使用像NMock这样的模拟框架来模拟测试FileProvider实现;
在运行时,您只需插入实际的实现.