Test-Despot

Ich erinnere mich vor ein paar Jahren führte ich folgendes Gespräch.

Manne: Du hast in Deinem Code vergessen die Factorymethode zu testen

public static PackageCreator factory() {
     return new PackageCreator();
 }

Peter (oder jeder andere): Die Methode muss nicht getestet werden, weil ja nur eine native Java Methode aufgerufen wird. Wir müssen schon davon ausgehen, dass Java funktioniert.

Manne: (guckt ungläubig)

Peter: Ja, ja, ich schreiben einen Test, Dir zuliebe.

@Test
  public void testnull() throws Exception {
      assertThat(PackageCreator.factory(), notNullValue());
  }

Manne: Dieser Test ist ja wohl mehr als Schwachsinn!

Peter: Sag‘ ich ja, aber Du wolltest doch dass ich Java teste.

Manne: Dieser Test ist auch grün wenn ich „irgend ein“ Object zurück gebe.

 public static Object factory() {
      return new Object();
 }

Peter: Pfff, das ist doch Sabotage.

Manne: Das ist ein typischer Test der geschrieben wurde, nachdem der Code fertig war. Was genau macht die Methode denn?

Peter: Sie gibt einen Package Creator zurück.

Manne: Genau, ich hätte einen Test vorher geschrieben, der genau das abtestet.

 @Test
  public void testReturnsPackageCreator() throws Exception {
     assertThat(PackageCreator.factory(),
     assertThat(PackageCreator.factory(), isA((PackageCreator.class)));
  }

Merke: Wenn man erst den Test schreibt und dann die Implementierung, dann stellen sich viele Fragen gar nicht.

Hier eine Anmerkung meines geschätzten Kollegen Martin Spiller: Eigentlich will ich ja sicherstellen, dass es kein Singleton ist, sondern immer eine neue Instanz erzeugt wird. Deshalb ein zusätzlicher Test:

 @Test
 public void testReturnsNotUniqueInstances() throws Exception {
    PackageCreator creatorOne = PackageCreator.factory();
    PackageCreator creatorTwo = PackageCreator.factory();
    assertThat(creatorOne, not(sameInstance(creatorTwo)));
 }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

%d Bloggern gefällt das: