【问题标题】:How to set test file path for MbUnit tests with Gallio via NAnt?如何通过 NAnt 使用 Gallio 为 MbUnit 测试设置测试文件路径?
【发布时间】:2011-06-20 19:58:55
【问题描述】:

请原谅这个模棱两可的标题;很难用一行来形容。

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

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

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

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

【问题讨论】:

    标签: file nant mstest mbunit gallio


    【解决方案1】:

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

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

    1. 将一个名为 Resources 的文件夹添加到您的测试项目中(这样您就可以将所有内容放在一个地方)
    2. 将所需文件放入其中(例如MyFile.txt
    3. 通过Add > Existing Item... 将文件添加到您的项目中(这样您的文件将与您的源代码一起保存。它们随后会作为测试项目程序集的一部分进行部署)
    4. 将文件添加到测试项目的资源中(项目属性中的标签ResourcesAdd Resource > Add Existing File...
    5. 使用测试夹具中的文件:
      1. 在您的夹具类中定义一个文件路径字段(使用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);
      }
    }
    

    【讨论】:

    • 是的,这似乎是明智的。如果我在测试中写入文件,无论如何我都会使用Path.GetTempFileName(),但我想我是因为避免为我正在读取的所有测试文件添加资源而变得懒惰>!
    猜你喜欢
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多