【发布时间】:2016-02-09 17:03:15
【问题描述】:
我有一个方法,它以FileInfo 对象作为参数,并检查相应的文件是否以UTF-8 编码。
我使用添加到 UnitTest 项目的真实文本文件使用 MSTest 为其编写了一些单元测试,这些文件使用 DeploymentItem 属性进行部署。然后我创建指向已部署文件的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),所以我在考虑如何模拟文件。我想我必须:
- 创建一个实际上将被测试的子方法,而不是原来的
一个只会调用它,并将 a 作为参数
FileStream而不是FileInfo。 - 创建一个以 UTF-8 编码(或不编码)的
FileStream,并将其传递给子方法。
所以,我有一些问题,从更具体到更一般:
- 如何在没有要读取的真实文件的情况下创建以 UTF-8 编码的
FileStream对象? - 创建此子方法是允许模拟文件的唯一替代方法吗?
- 原来的方法呢?我可以通过某种方式对其进行测试吗?
- 创建这种子方法(仅允许单元测试)是否被认为是一种好习惯?
- 我真的应该尽量避免在单元测试中使用真实文件,还是有类似的案例可以证明这一点?
【问题讨论】:
-
请添加
IsUTF8方法的实现,这样我就可以回答你的问题了......
标签: c# unit-testing encoding io