我需要为一个读取xml文件并解析其内容的类编写单元测试。我怎样才能模拟文件读取?因为测试的所有内容都应该是针对读取文件的。
我在nUnit中使用nmock2。
谢谢
发布于 2010-06-13 15:39:00
正如rwwilden建议的那样,如果使用基于流的API而不是基于文件名的API,生活会容易得多。在这里使用mocking并不是非常合适,IMO;你不是在做“协议测试”--你只是想要一个数据源。
您还可以提供一个重载,这是一个简单的实用方法:
public Result ParseXml(string file)
{
using (Stream stream = File.OpenRead(file))
{
return ParseXml(stream);
}
}然后,您可以合理地安全地不测试该方法-它毕竟没有重要的逻辑。
现在,您可以通过在代码中使用硬编码字符串,然后调用Encoding.UTF8.GetBytes(xml)并围绕生成的字节数组构建一个MemoryStream来测试基于流的应用程序接口。但我通常更喜欢在我的测试项目中使用单独的数据文件。设置内容类型为"embedded resource“,然后使用Assembly.GetManifestResourceStream获取指向测试文件的流。
但是,如果这真的是一个普通的XML文件,那么您真的想自己进行解析吗?您有什么理由不想把它留给框架,而用DOM、LINQ to XML或XmlReader来表达您的API
发布于 2010-06-13 15:33:26
您所要做的就是找到一种方法来告诉您的类要读取哪个文件。因此,这在一定程度上取决于您的类是如何实现的。最简单的方法是这样的:
public class ClassToTest : IClassToTest
{
public Result ParseXml(Stream xml)
{
// Parse xml and return result.
return ...;
}
}
[Test]
public void TestParseXml()
{
// Get xml stream to test from somewhere.
Stream xmlStream = ...;
// Call method to test.
var result = new ClassToTest().ParseXml(xmlStream);
// Assert results.
Assert.IsNotNull(result);
...
}其思想是以某种方式为正在测试的类提供一个xml文件,该文件是您创建的,并且您知道该文件的解析结果是什么。
https://stackoverflow.com/questions/3031409
复制相似问题