Wann ist ein Test ein Unit-Test?

Entwickler schreiben ihre Tests normalerweise mit einem Unit-Test-Framework. Oft sind die Tests aber langsam und unlesbar. Fast immer liegt es daran, dass die Tests mit der Datenbank, dem Dateisystem, einem Web-Service oder einer anderen externen Ressource kommunizieren. Die Entwickler hören zuerst auf, die Tests regelmäßig auszuführen, und in weiterer Folge schreiben sie auch keine Tests mehr, weil “Unit-Tests” so langsam und schwer zu ändern sind.

Michael Feathers hat schon im September 2005 die Kriterien für Unit-Tests zusammengefasst:

“Ein Test ist kein Unit-Test, wenn:

  1. er mit einer Datenbank kommuniziert.
  2. er über das Netzwerk kommuniziert.
  3. er das Dateisystem anspricht.
  4. er nicht zur gleichen Zeit wie ein anderer Unit-Test ausgeführt werden kann.
  5. du spezielle Dinge mit dem Environment tun musst (z.B. Editieren von Konfigurationsdateien), um ihn auszuführen.

Tests, die diese Dinge machen, sind nicht schlecht. Häufig sind sie es wert, geschrieben zu werden, und dafür kann ein Unit-Test-Harness verwendet werden. Aber es ist wichtig, sie von echten Unit-Tests trennen zu können, so dass wir eine Reihe von Tests haben, die wir schnell ausführen können, wann immer wir unseren Code ändern.”

Entwickler schreiben also häufig gar keine Unit-Tests! Stattdessen handelt es sich um Integrationstests. Um echte Unit-Tests zu schreiben, gehört also mehr dazu als die Test-Attribute des verwendeten Unit-Test-Frameworks zu kennen.


Kick It auf dotnet-kicks.de
Dieser Eintrag wurde veröffentlicht in .NET und getagged , . Bookmarken: Permanent-Link. Kommentieren oder ein Trackback hinterlassen: Trackback-URL.
  • http://berndhengelein.de Bernd Hengelein

    Hallo Andreas, danke für den Post. Ich lese gerade “The art of Unit Testing” von Roy Osherove. Er hat auch ein paar Kriterien dazu aufgeschrieben:

    It is automated and repeatable.
    It is easy to implement.
    Once it’s written, it stays on for the future.
    Anyone can run it.
    It runs at the push of a button.
    It runs quickly.

    Ich denke das ist ein gute Ergänzung zu Micheal Feathers.
    Gruss,
    Bernd

  • aschlapsi

    Hallo Bernd,
    das Buch ist auch auf meiner Leseliste. Es scheint eine Empfehlung wert zu sein.
    Andreas

  • http://blog.tobsen.de tobsen

    Hinzufügen kann ich noch folgendes aus dem Buch “Pragmatic UnitTesting in C# with NUnit”:

    Good tests have the following properties, which makes them “A-TRIP”:
    Automatic,
    Thorough,
    Repeatable,
    Independent,
    Professional

  • http://blog.aztec-project.org/ Christina

    Hallo Andreas,

    Zum selben Thema hat Scott Hanselman auch einen Podcast mit ihm veröffentlicht: Art of Unit Testing http://www.hanselminutes.com/default.aspx?showID=187

    Gruß,
    Christina