2013-04-11 120 views
6

我有以下代码(sample1.evol - 文件贴在我的单元测试项目):NUnit测试工作目录

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

我发现,测试执行的工作目录是不大会目录(在我的案例代码路径变量分配给d:\EvolutionSamples\sample1.evol)。

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

+0

在开始删除\或放一个。在之前呢? – 2013-04-11 21:29:55

+7

Nunit有一个[TestContext](http://nunit.org/index.php?p=testContext&r=2.6.2),它包含TestDirectory属性和WorkDirectory属性 – Gus 2013-04-11 21:34:10

+0

我的问题是,你为什么要读取单元中的文件测试? – 2013-04-11 21:45:13

回答

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

我使用这个代码:

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

在入门str变量汇编目录。

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"));