![](/img/trans.png)
[英]Unit test for a method that takes a HttpResponse object as a parameter. OutputStream is not available
[英]Unit test method that takes FileInfo as a parameter
我有一个采用FileInfo
对象作为参数并检查相应文件是否以UTF-8编码的方法。
我使用添加到UnitTest项目中的真实文本文件(使用DeploymentItem
属性进行部署)使用MSTest为它编写了一些单元测试。 然后,我创建指向已部署文件的FileInfo
对象,并使用它们测试方法。 像这样:
[TestMethod]
[DeploymentItem(@"..\..\Import\UTF8.txt")]
public void TestUTF8Detection()
{
FileInfo fileInfo = new FileInfo("UTF8.txt");
bool isUTF8= FormatVerification.IsUTF8(fileInfo);
Assert.IsTrue(isUTF8);
}
但是,我已经读到,使用真实文件可能会更慢且更不值得信任(例如here和here ),所以我在考虑如何模拟文件。 我想我必须:
FileStream
而不是FileInfo
作为参数。 FileStream
,并将其传递给子方法。 因此,我有一些问题,从更具体到更一般:
FileStream
对象而没有要读取的真实文件? FileInfo
是密封的,因此您不能执行继承和覆盖技巧。
我将使用类似SystemWrapper之类的东西 ,或者像Haukinger建议的那样为FileInfo滚动我自己的界面,然后一旦您的代码依赖于该界面,就应该容易地模拟所需的行为。
我猜您最好的选择是将FileInfo
与一个从文件名创建文件的工厂一起抽象到IMyFileInfo
(即,它创建原始的FileInfo
和包装器)。
然后,测试可以创建模拟IMyFileInfo
)。 接口/包装程序应公开IsUTF8
所需的FileInfo
中的所有内容。
然后,生产代码应使用工厂而不是new
来创建包装器,而不是真正的FileInfo
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.