如果我有这样的话:
static class ManifestGenerator
{
public static void GenerateManifestFile(){
var doc = new XDocument();
...
... xml stuff added to doc
...
doc.Save(manifestFilePath)
}
现在请您告诉我如何创建一个单元测试,以确保该方法生成正确的xml? 如何模拟XDocument(我正在使用Moq),而不向方法调用添加其他参数
答案 0 :(得分:6)
不要试图模仿XDocument
。这不是问题 - 这是对文件系统的访问,这很烦人。您可以传入Stream
来写清单:
public static void GenerateManifestFile(Stream output) {
var doc = new XDocument();
...
... xml stuff added to doc
...
doc.Save(output);
}
然后您可以使用MemoryStream
对其进行测试,但实际上对清单路径使用FileStream
。您甚至可以将此方法设为内部(使用[InternalsVisibleTo]
,这样您仍然可以通过测试访问它)和公共无参数重载:
using (Stream output = File.OpenWrite(manifestFilePath))
{
GenerateManifestFile(output);
}
然后您不测试那个代码,但您可以测试所有真实的逻辑。