Bryan Albrecht

C# Unit Tests

Es ist möglich mit Unit Test sein Programm zu testen, beziehungsweise die Funktionen zu testen.

Die Tests können unabhängig vom eigentlichen Programm ablaufen und verändern dieses auch nicht.

Vorbereitung

Ich empfehle für dieses Beispiel eine Konsolenapplikation zu erstellen, da diese nicht viele Daten erstellt und übersichtlich bleibt.

Nach dem Erstellen des Projektes, wird eine Klasse hinzugefügt, in welches später die zu testende Funktion geschrieben wird.

Funktion

Im Bild wird gezeigt, wie die Solution momentan ungefähr aussehen sollte.

Einbinden

Für die Tests muss man ein neues Unit Test Projekt der Solution hinzufügen.

File Menü -> Add -> New Project -> Visual C# -> Test -> Unit Test Project.

Den Namen für das Projekt würde ich so wählen, dass ersichtlich ist, für welches Projekt die Tests sind.

Das heisst, dass ich für das Projekt Calculator den Namen TestCalculator wählen würde.

Der Solution Explorer sieht nun so aus:

Source

Die Klasse die im Moment Standartweise UnitTest1 heisst würde ich umbenennen, damit ersichtlich ist welche Klasse damit getestet wird.

Bei der Namensgebung empfehle ich de gleiche Vorgehensweise wie bei der Klasse vorhin.

Source

Damit man später auf die zu testende Klasse zugreifen kann, muss man vom TestProjekt eine Referenz auf das zu testende Projekt machen. Dafür muss man mit der rechten Maustaste auf das Projekt und erneut unter Add die Referenz hinzufügen.

Danach muss man eine Member-Variable erstellen, vom Typen der zu testenden Klasse.

Code:

  1. Unit_Test_Tutorial.ClassWithFunctions _classWithFunctions;

Das füllen eines Objektes geschieht im Kunstruktor.

Code:

  1. public TestClassWithFunctions()
  2. {
  3. _classWithFunctions = new Unit_Test_Tutorial.ClassWithFunctions();
  4. }

Tests erstellen

Die Soeben umbenannte Klasse enthält noch nicht viel und wird in etwa so aussehen:

  1. [TestClass]
  2. public class TestClassWithFunctionsv
  3. {
  4. [TestMethod]
  5. public void TestMethod1()
  6. {
  7. }
  8. }

Der erste Schritt, welchen wir in dieser Klasse machen, ist das umbenennen der Standard-Methode.

Sinnvoller Weise ist im Namen erkennbar, welche Methode getestet, was darin gemacht und was zurückgegeben wird.

Beispiel: TestForNumber_TestIfNumberIsInString_Bolean()

Im folgenden Beispiel verwende ich einen drei Teile Aufbau, wie eine Testmethode aufgebaut sein könnte.

Der wichtige Teil dabei ist das Assert, da der Rest nur als Hilfe fungiert.

Beispiel:

  1. [TestMethod]
  2. public void TestForNumber_TestIfNumberIsInString_Bolean()
  3. {
  4. //Arrange: Given a string
  5. string stringToTest = "HalloWelt9";
  6. int wantedNumber = 9;
  7. //Act: ... add two numbers together and return the result:
  8. var isTheNumberInside = _classWithFunctions.TestForNumber(stringToTest,wantedNumber);
  9. //Assert
  10. Assert.AreEqual(true, isTheNumberInside);
  11. }

Funktion erstellen

Um den Test auch durchführen zu können bracht man noch eine Funktion, welche man schlussendlich testet.

Beispiel:

    public bool TestForNumber(string stringToTest, int int number)
  1. {
  2. return true;
  3. }

Im Beispiel wird keine Logik verwendet, da dies nicht das Thema ist.

Testen

Um einen Test durchzuführen muss man rechtsklick auf [TestClass] oder [TestMethod] machen. Je nach Auswahl werden alle oder nur der gewünschte Test ausgeführt.

TestClass -> Alle Tests.

TestMethod -> Gewünschter test.

Auf der linken Seite erscheinen nach dem ausführen die Ergebnisse der Tests.