0

请原谅模棱两可的标题;很难用一行来描述。

基本上,我们有 MbUnit 测试,它们在 Visual Studio 中使用 TestDriven 运行良好,但在尝试通过 NAnt 中的 <gallio> 任务运行测试时失败。

失败与尝试读取文件的测试有关;他们读取相对于当前目录的文件,例如“..\..\files\dir\whatever”。但是问题似乎是 Gallio 将测试 DLL 复制到其他地方的目录,并将当前目录设置为“%HOMEDIR%\AppData\Local\Temp\Gallio\MSTestAdapter\randomname\TestDir\Out\something”。

所以我的问题有两个:我应该将测试所需的文件放在哪里,以便在运行时找到它们,以及我应该如何从代码中引用它们?

(另外,我认为我们根本没有使用 MS-Test,那么那里怎么会有一个“MSTest”目录呢?)

4

1 回答 1

1

尽管我们使用 NUnit 而不是 MbUnit,但我认为我可以提供一些关于在单元测试中处理文件的一般建议。

永远不要依赖路径——既不是绝对的也不是相对的。保持对测试内部路径的控制。这就是我们所做的:

  1. 添加一个名为Resources您的测试项目的文件夹(这样您就可以将所有内容放在一个地方)
  2. 将所需的文件放在那里(例如MyFile.txt
  3. Add通过>将文件添加到您的项目Existing Item...(因此您的文件与您的源代码一起保存。它们随后作为测试项目程序集的一部分进行部署)
  4. 将文件添加到测试项目的资源中(Resources项目属性中的选项卡Add Resource> Add Existing File...
  5. 使用测试夹具中的文件:
    1. 在你的fixture类中定义一个文件路径字段(使用Path.GetTempFileName()因为你有一个唯一的路径,很可能你在任何机器上都有足够的访问权限)
    2. 在测试设置期间使用文件路径创建本地文件
    3. 在测试中使用该文件
    4. 在拆卸过程中删除创建的文件

这是一个示例:

[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);
  }
}
于 2011-02-04T11:30:21.950 回答