2013-04-11 18 views
6

私は、次のコード(sample1.evol - 私のユニットテストプロジェクトに添付されたファイル)があります。NUnitのテスト作業ディレクトリ

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

を私は、テスト実行の作業ディレクトリは、アセンブリのディレクトリではありませんことがわかった。(中私のケースコードパス変数はd:\EvolutionSamples\sample1.evolに割り当てられています)。

実行作業ディレクトリ(ハードコードなし)を変更するにはどうすればよいですか?テストケースに添付されたファイルをロードするベストプラクティスは何ですか?

+0

は、開始時に\を削除するか、または置きます。その前に? –

+7

NunitにはTestDirectoryプロパティとWorkDirectoryプロパティを含む[TestContext](http://nunit.org/index.php?p=testContext&r=2.6.2)があります – Gus

+0

私の質問は、あなたのユニット内のファイルを読んでいる理由ですテスト? –

答えて

2

データファイルにアクセスする必要のある統合テストにこれを使用します。

テストを実行する必要のあるマシンでは、テストデータの場所を指すTestDataDirectoryという名前のシステム環境変数を作成します。

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

に行き方:

は次にあなたのためのファイルパスを取得する静的メソッド..

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

私はこのコードを使用していますがありますstr variableアセンブリディレクトリ。

0

ReSharperとNCrunchを使用してテストを実行すると問題が発生しましたが、ネイティブVSテストランナーは、テスト用の相対ファイルパスが指定されているとファイルを見つけることができませんでした。相対的なテストファイルのパスを渡す関数を作成することで解決し、絶対パスを指定します。

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")); 
関連する問題