nunit测试工作目录

时间:2013-04-11 21:28:06

标签: c# nunit

我有以下代码(sample1.evol - 附加到我的单元测试项目的文件):

[Test]
public void LexicalTest1()
{
     var codePath = Path.GetFullPath(@"\EvolutionSamples\sample1.evol");
     //.....
}

我发现测试执行的工作目录不是汇编目录:(在我的情况下,代码路径变量分配给d:\EvolutionSamples\sample1.evol)。

那么,如何更改执行工作目录(没有硬编码)?加载附加到测试用例的任何文件的最佳做法是什么?

3 个答案:

答案 0 :(得分:2)

我将其用于需要访问数据文件的集成测试。

在测试需要运行的任何计算机上创建一个名为 TestDataDirectory 的系统环境变量,该变量指向测试数据所在的根目录。

然后有一个静态方法为你获取文件路径..

public static class TestHelper
{
    const string EnvironmentVariable = "TestDataDirectory";
    static string testDataDir = Environment.GetEnvironmentVariable(EnvironmentVariable);

    public static string GetTestFile(string partialPath)
    {
        return Path.Combine(testDataDir, partialPath);
    }
}

...

[Test]
public void LexicalTest1()
{
    var codePath = TestHelper.GetTestFile(@"\EvolutionSamples\sample1.evol");
    //.....
}

答案 1 :(得分:2)

我正在使用此代码:

   var str = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
   if (str.StartsWith(@"file:\")){
       str = str.Substring(6);
   }

获取str变量汇编目录。

答案 2 :(得分:0)

我们遇到了一个问题,即使用ReSharper运行测试并且NCrunch可以工作,但是当给出仅供测试使用的相对文件路径时,本机VS Test Runner将无法找到文件。我通过创建一个将相对测试文件路径传递到的函数来解决它,它将为您提供绝对文件路径。

private static string _basePath = Path.GetDirectoryName(typeof(NameOfYourTestClassGoesHere).Assembly.Location);
private string GetAbsoluteTestFilePath(string relativePath) => Path.Combine(_basePath, relativePath);

然后您将使用如下函数:

var input = File.ReadAllLines(GetAbsoluteTestFilePath(@"TestData/YourTestDataFile.txt"));