gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:30:58 25 4
gpt4 key购买 nike

我有一个方法我想单元测试它有文件系统调用,我想知道如何去做。我看过Unit testing code with a file system dependency但它没有回答我的问题。

我正在测试的方法看起来像这样 (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 方法创建某种包装器吗?

最佳答案

编辑 我在你将 C# 添加到问题之前回答了(或者我错过了它......)所以我的回答有点 java 风格,但原则是相同的......

您对文件 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...
}
}

这是 dependency injection的一个例子- 使事情易于测试的常见模式:
  • 在测试时,您可以使用模拟框架,如 NMock模拟测试 FileProvider执行;
  • 在运行时,您只需插入真正的实现即可。
  • 关于unit-testing - 包含文件系统调用的单元测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/370925/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com