繁体   English   中英

nunit测试工作目录

[英]nunit test working directory

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

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

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

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

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

在测试需要运行的任何机器上,创建一个名为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");
    //.....
}

我正在使用此代码:

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

获取str变量汇编目录。

我们遇到了一个问题,即使用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"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM