我有以下代码(sample1.evol - 附加到我的单元测试项目的文件):
[Test]
public void LexicalTest1()
{
var codePath = Path.GetFullPath(@"\EvolutionSamples\sample1.evol");
//.....
}
我发现测试执行的工作目录不是汇编目录:(在我的情况下,代码路径变量分配给d:\EvolutionSamples\sample1.evol
)。
那么,如何更改执行工作目录(没有硬编码)?加载附加到测试用例的任何文件的最佳做法是什么?
答案 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"));