Was sind Unit-Tests?

Vertrauen ist gut, Unit-Tests sind besser

Unit-Tests kurz und knapp erklärt

Was sollte ein Softwareentwickler immer tun, wenn er etwas am Code geändert hat? Richtig! Testen, testen und nochmals testen. Und Unit-Tests sind der erste Schritt zur Umsetzung dieses gut gemeinten Ratschlags. Denn mit ihnen werden die kleinsten Programmeinheiten (Units) automatisiert überprüft – quasi Code, der Code bewertet. Ziel ist es, die Schnittstellen jeder einzelnen Komponente (z.B. Klassen, Methoden oder Funktionen) auf Fehler abzuklopfen. Ein Unit-Test läuft dabei häufig nach einem festen Schema, dem sogenannten AAA-Pattern (keine Sorge wir überprüfen nicht Ihre Bonität) ab: 

  • Arrange: Bevor es losgeht, müssen einige Voraussetzungen vorhanden sein. Hierzu gehören z.B. Umgebungs-Variablen und Test-Daten. In der Arrange-Phase, auch Setup genannt, erfolgt deren Initialisierung.
  • Act: In Stufe Zwei des Unit-Tests erfolgt die Durchführung des eigentlichen Anwendungsfalls, beispielsweise der Aufruf einer bestimmten Funktion (z.B. einer Additions-Funktion).
  • Assert: Zum Schluss wird es spannend. Denn nun werden alle Annahmen überprüft. Beispielsweise, ob die Addition von Eins und Eins Zwei ergibt – man weiß ja nie.

Und so sieht ein Unit Test in C# aus:

				
					using NUnit.Framework; 
 
namespace UnitTests 
{ 
    public class MatheTests 
    { 
        public int Nummer1 { get; set; } 
        public int Nummer2 { get; set; } 
        public TaschenRechner TaschenRechner { get; set; } 
 
        // Arrange 
        [SetUp] 
        public void Setup() 
        { 
            Nummer1 = 1; 
            Nummer2 = 1; 
            TaschenRechner = new TaschenRechner(); 
        } 
 
        [Test] 
        public void Teste_Addition() 
        { 
            // Act 
            var ergebnis = TaschenRechner.AddiereZahlen(Nummer1, Nummer2); 
                
            // Assert 
            Assert.AreEqual(2, ergebnis); 
            
             
        } 
    } 
} 

				
			

Idealerweise hat der Softwareentwickler für alle wichtigen Funktionen mindestens einen Unit-Test geschrieben. Denn so kann man sich auf die faule Haut legen und nach und nach beobachten, wie der Computer alle Tests der Reihe nach überprüft. Hat die Softwareentwicklerin oder der Softwareentwickler saubere Arbeit geleistet, erscheint ein Bericht mit vielen grünen Häkchen. Wenn nicht, dann geht’s noch mal ran an die Fehlersuche – und täglich grüßt in der Softwareentwicklung das Murmeltier bzw. der Test-Report.

Dieser Unit-Test-Report sieht doch schon ganz gut aus. Nur bei der Substraktions-Methode scheint noch was schief zu laufen.

Unit-Testing to go

Bekannte Test-Frameworks und -Bibliotheken

Damit ein Unit-Test in einer Entwicklungsumgebung wie Visual Studio auch als solcher erkannt wird, gibt es für Softwareentwickler spezielle Bibliotheken. Diese Fertigbaukästen beinhalten alles, was es braucht, um eine Softwarekomponente auf Herz und Nieren zu prüfen: 

  • Meta-Daten und Attribute (das Zeug in den eckigen Klammern), mit denen man seinen Programmcode ausschmücken kann, damit die Entwicklungsumgebung einen Unit-Test erkennt und korrekt ausführt.
  • Überprüfungs-Methoden, z.B. wie „AreEqual“ (siehe oben). Das reicht von einfachen Vergleichen zweier Variablen bis hin zu komplexen Prüfroutinen.
  • Mock-Funktionen, um Abhängigkeiten, wie beispielsweise Datenbanken zu simulieren.

Die bekanntesten Unit-Test-Frameworks, die man in der Softwareentwicklung mit .NET als Bibliotheken verwenden kann sind: 

  • xUnit
  • NUnit
  • MSTest

Sie haben Fragen oder Anregungen?

Kontaktieren Sie uns noch heute: