2013-04-11 24 views
6

Mam następujący kod (sample1.evol - plik dołączony do mojego projektu badanej jednostki):testy nunit katalog roboczy

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

okazało się, że katalog roboczy od wykonania testu nie jest katalog montaż: (w moja zmienna kodowa case przypisana do d:\EvolutionSamples\sample1.evol).

Jak zatem zmienić katalog roboczy wykonania (bez kodu twardego)? Jaka będzie najlepsza praktyka ładowania plików dołączonych do testowego egzemplarza?

+0

Usunąć \ na początku lub umieścić. przed tym? –

+7

Nunit ma [TestContext] (http://nunit.org/index.php?p=testContext&r=2.6.2), który obejmuje właściwość TestDirectory i właściwość WorkDirectory – Gus

+0

Moje pytanie brzmi, dlaczego czytasz pliki w swojej jednostce testy? –

Odpowiedz

2

Używam tego do testów integracyjnych, które wymagają dostępu do plików danych.

Na każdej maszynie test musi uruchomić utworzyć zmienną środowiskową systemu o nazwie TestDataDirectory, który wskazuje na korzeń gdzie dane badanie jest.

Następnie mieć statyczną metodę, która pobiera ścieżkę pliku dla ciebie ..

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

Używam tego kodu:

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

Wstęp str zmień katalog montażu.

0

Mieliśmy problem z testami uruchamianymi za pomocą programu ReSharper i NCrunch, ale natywny program VS Test Runner nie byłby w stanie znaleźć tych plików, gdy podano tylko względną ścieżkę do pliku, aby można było użyć testu. Rozwiązałem go, tworząc funkcję, do której przekażesz względną ścieżkę do pliku testowego, i uzyskasz absolutną ścieżkę do pliku.

private static string _basePath = Path.GetDirectoryName(typeof(NameOfYourTestClassGoesHere).Assembly.Location); 
private string GetAbsoluteTestFilePath(string relativePath) => Path.Combine(_basePath, relativePath); 

Można by następnie użyć funkcji tak:

var input = File.ReadAllLines(GetAbsoluteTestFilePath(@"TestData/YourTestDataFile.txt"));