Unit Tests mit NUnit unter .NET Core

Unit Tests NUnit NET CoreInzwischen ist NUnit unter .NET Core lauffähig. Im Detail gibt es ein paar Dinge zu beachten. In loser Folge aktualisiere ich diesen Blogbeitrag um meine Erkenntnisse.

WorkDirectory vs. TestDirectory

Seit NUnit 3 wird bei der Ausführung von Tests zwischen dem TestDirectory und dem WorkDirectory unterschieden. Im TestDirectory liegt die Assembly, welche den gerade laufenden Test enthält. Das WorkDirectory ist das Verzeichnis, in dem NUnit seine Ausgabedateien (z.B. TestResult.xml) erzeugt.

Das aktuelle Verzeichnis für den Prozess, in dem der Test läuft, ist jetzt das WorkDirectory, während es in NUnit 2 das TestDirectory war. Dieser „breaking change“ sorgt dafür, dass Tests die unter NUnit 2 problemlos ihre Testdateien gefunden haben, nun angepasst werden. So weit so gut. Beim .NET Framework hilft folgendes Test Setup:

[SetUp]
public void Setup() {
    Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
}

Siehe dazu auch meinen Artikel über das Testen von Ressourcen.

In der .NET Core Version existiert die Eigenschaft TestDirectory allerdings nicht in der Klasse TestContext. Daher muss das Setup hier wie folgt aussehen:

[SetUp]
public void Setup() {
    var assemblyLocation = GetType().GetTypeInfo().Assembly.Location;
    var path = Path.GetDirectoryName(assemblyLocation);
    Directory.SetCurrentDirectory(path);
}

Visual Studio ‚Copy To Output Directory’ unter .NET Core

In Visual Studio Projekten kann man den Buildprozess veranlassen, eine Datei in das Ausgabeverzeichnis zu kopieren. Dazu geht man im Solution Explorer in die Eigenschaften der zu kopierenden Datei und setzt die Eigenschaft „Copy to Output Directory“ auf „Copy always“ oder „Copy if newer“. Bei .NET Core Projekten existiert diese Eigenschaft allerdings nicht.

Der gleiche Effekt kann durch eine Einstellung in der Datei project.json erreicht werden. Ergänzen Sie dort den folgenden Eintrag:

"buildOptions": {
  "emitEntryPoint": true,
  "copyToOutput": {
    "includeFiles": [ "content\\Tweets.csv" ]
  }
}

Im Beispiel wird die Datei Tweets.csv aus dem Unterverzeichnis content in das Ausgabeverzeichnis kopiert.

Diesen Beitrag ergänze ich in loser Folge, sobald sich neue Erkenntnisse ergeben.

 

 

Schreibe einen Kommentar