5

如果我有这样的事情:

static class ManifestGenerator
{
    public static void GenerateManifestFile(){
    var doc = new XDocument();
    ...
    ... xml stuff added to doc
    ...
    doc.Save(manifestFilePath)
}

现在你能告诉我如何创建一个单元测试来确保该方法生成正确的xml吗?如何在不向方法调用添加其他参数的情况下模拟 XDocument(我正在使用 Moq)

4

1 回答 1

6

不要试图嘲笑XDocument. 这不是这里的问题——令人讨厌的是对文件系统的访问。您可以传入 aStream以将清单写入:

public static void GenerateManifestFile(Stream output) {
  var doc = new XDocument();
  ...
  ... xml stuff added to doc
  ...
  doc.Save(output);
}

然后您可以使用 a 进行测试MemoryStream,但实际上使用 aFileStream到清单路径。您甚至可以将此方法设置为内部方法(使用[InternalsVisibleTo]以便您仍然可以从测试中访问它)和公共无参数重载,如下所示:

using (Stream output = File.OpenWrite(manifestFilePath))
{
    GenerateManifestFile(output);
}

然后,您无需测试代码,但您可以测试所有真实逻辑。

于 2012-04-19T19:29:21.297 回答