如果我有这样的东西:
static class ManifestGenerator
{
public static void GenerateManifestFile(){
var doc = new XDocument();
...
... xml stuff added to doc
...
doc.Save(manifestFilePath)
}
现在您能告诉我如何创建一个单元测试来确保该方法生成正确的 xml 吗? 我如何模拟 XDocument(我正在使用 Moq),而不向方法调用添加额外的参数
最佳答案
不要尝试模拟 XDocument
。这不是这里的问题 - 令人讨厌的是对文件系统的访问。您可以传入 Stream
以将 list 写入:
public static void GenerateManifestFile(Stream output) {
var doc = new XDocument();
...
... xml stuff added to doc
...
doc.Save(output);
}
然后您可以使用 MemoryStream
对其进行测试,但在现实中使用 FileStream
到 list 路径。您甚至可以将此方法设为内部方法(使用 [InternalsVisibleTo]
,这样您仍然可以从测试中访问它)和公共(public)无参数重载,如下所示:
using (Stream output = File.OpenWrite(manifestFilePath))
{
GenerateManifestFile(output);
}
然后您无需测试该代码,但您可以测试所有真实逻辑。
关于c# - 你如何在静态方法中模拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10235310/