请原谅这个含糊不清的标题;很难用一行描述。
基本上我们有MbUnit测试,它们在Visual Studio中使用TestDriven运行良好,但在尝试通过< gallio>运行测试时失败了。来自NAnt的任务。
失败与尝试读取文件的测试有关;他们读取相对于当前目录的文件,例如“.. \ .. \ files \ dir \ whatever”。但问题似乎是Gallio将测试DLL复制到其他地方的目录,并将当前目录设置为“%HOMEDIR%\ AppData \ Local \ Temp \ Gallio \ MSTestAdapter \ randomname \ TestDir \ Out \ something”。
所以我的问题是双重的:我应该把测试所需的文件放在哪里,以便在运行时找到它们,我应该如何从代码中引用它们?
(另外,我根本不认为我们正在使用MS-Test,那么为什么会有一个'MSTest'目录呢?)
答案 0 :(得分:1)
虽然我们使用NUnit而不是MbUnit,但我认为在单元测试中有一些关于处理文件的一般建议。
永远不要依赖路径 - 既不是绝对的也不是相对的。控制测试中的路径。这就是我们的工作:
Resources
的文件夹添加到您的测试项目中(因此您可以将所有内容放在一个位置)MyFile.txt
)Add
>将文件添加到项目中Existing Item...
(因此您的文件与源代码保存在一起。之后作为测试项目程序集的一部分进行部署)Resources
> Add Resource
中的标签Add Existing File...
)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);
}
}