如何在静态方法中模拟对象
本文关键字:模拟 对象 静态方法 | 更新日期: 2023-09-27 18:31:37
如果我有这样的东西:
static class ManifestGenerator
{
public static void GenerateManifestFile(){
var doc = new XDocument();
...
... xml stuff added to doc
...
doc.Save(manifestFilePath)
}
现在你能告诉我如何创建一个单元测试来确保该方法生成正确的 xml 吗?如何模拟 XDocument(我正在使用 Moq),而无需向方法调用添加其他参数
不要试图嘲笑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);
}
然后,您不会测试该代码,但可以测试所有实际逻辑。