2013-04-11 13 views
6

Ho il seguente codice (sample1.evol - file allegato al mio progetto prova di unità):di prova NUnit directory di lavoro

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

ho trovato che la directory di lavoro di esecuzione dei test non è la directory di montaggio: (in mia variabile codepath del mio caso assegnata a d:\EvolutionSamples\sample1.evol).

Quindi, come posso modificare la directory di lavoro di esecuzione (senza hardcode)? Quale sarà la migliore pratica per caricare qualsiasi file allegato al test case?

+0

Rimuovere il \ all'inizio o mettere un. prima di cio? –

+7

Nunit ha un [TestContext] (http://nunit.org/index.php?p=testContext&r=2.6.2) che include la proprietà TestDirectory e la proprietà WorkDirectory – Gus

+0

La mia domanda è, perché stai leggendo i file nella tua unità test? –

risposta

2

Uso questo per i test di integrazione che devono accedere ai file di dati.

Su qualsiasi macchina il test deve essere eseguito crea una variabile di ambiente di sistema denominata TestDataDirectory che punta alla directory di origine dei dati di test.

poi hanno un metodo statico che ottiene il percorso del file per voi ..

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

Sto usando questo codice:

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

Entrare in str variabile la directory assembly.

0

Stavamo riscontrando un problema in cui i test eseguiti con ReSharper e NCrunch funzionavano, ma il VS Test Runner nativo non sarebbe stato in grado di trovare i file, se fornito solo un percorso di file relativo per il test da utilizzare. L'ho risolto creando una funzione in cui si passa il relativo percorso del file di test e si otterrà il percorso del file assoluto.

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

Si potrebbe quindi utilizzare la funzione in questo modo:

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