如何通过NAnt为Gallio设置MbUnit测试的测试文件路径?

时间:2011-02-03 17:14:56

标签: file nant mstest mbunit gallio

请原谅这个含糊不清的标题;很难用一行描述。

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

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

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

(另外,我根本不认为我们正在使用MS-Test,那么为什么会有一个'MSTest'目录呢?)

1 个答案:

答案 0 :(得分:1)

虽然我们使用NUnit而不是MbUnit,但我认为在单元测试中有一些关于处理文件的一般建议。

永远不要依赖路径 - 既不是绝对的也不是相对的。控制测试中的路径。这就是我们的工作:

  1. 将一个名为Resources的文件夹添加到您的测试项目中(因此您可以将所有内容放在一个位置)
  2. 将所需文件放入其中(例如MyFile.txt
  3. 通过Add>将文件添加到项目中Existing Item...(因此您的文件与源代码保存在一起。之后作为测试项目程序集的一部分进行部署)
  4. 将文件添加到测试项目的资源(项目属性Resources> Add Resource中的标签Add Existing File...
  5. 使用测试夹具中的文件:
    1. 在灯具类中定义文件路径字段(使用Path.GetTempFileName(),因为您拥有唯一的路径,并且您很可能在任何计算机上拥有足够的访问权限)
    2. 在测试设置期间使用文件路径创建本地文件
    3. 在测试中使用该文件
    4. 在拆除期间删除创建的文件
  6. 以下是一个示例:

    [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);
      }
    }