9

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

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

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

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

4

4 回答 4

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");
    //.....
}
于 2013-04-11T22:30:57.463 回答
2

我正在使用这段代码:

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

进入 str 变量的程序集目录。

于 2016-10-31T17:25:58.230 回答
2

您可以使用以下来获取运行代码的程序集目录,例如

var AssemblyDirectory = TestContext.CurrentContext.TestDirectory

于 2021-09-13T17:53:47.510 回答
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"));
于 2018-01-05T17:09:13.187 回答