尽管我们使用 NUnit 而不是 MbUnit,但我认为我可以提供一些关于在单元测试中处理文件的一般建议。
永远不要依赖路径——既不是绝对的也不是相对的。保持对测试内部路径的控制。这就是我们所做的:
- 添加一个名为
Resources
您的测试项目的文件夹(这样您就可以将所有内容放在一个地方)
- 将所需的文件放在那里(例如
MyFile.txt
)
Add
通过>将文件添加到您的项目Existing Item...
(因此您的文件与您的源代码一起保存。它们随后作为测试项目程序集的一部分进行部署)
- 将文件添加到测试项目的资源中(
Resources
项目属性中的选项卡Add Resource
> Add Existing File...
)
- 使用测试夹具中的文件:
- 在你的fixture类中定义一个文件路径字段(使用
Path.GetTempFileName()
因为你有一个唯一的路径,很可能你在任何机器上都有足够的访问权限)
- 在测试设置期间使用文件路径创建本地文件
- 在测试中使用该文件
- 在拆卸过程中删除创建的文件
这是一个示例:
[TestFixture]
public class MyFixture
{
private static readonly string MyFilePath = Path.GetTempFileName();
[SetUp]
public void SetUp()
{
// use File.WriteAllBytes for binary files
File.WriteAllText(MyFilePath, Properties.Resources.MyFile);
}
[Test]
public void TestSomething()
{
Assert.That(ObjectUnderTest.UseFile(MyFilePath), Is.True);
}
[TearDown]
public void TearDown()
{
File.Delete(MyFilePath);
}
}