Separation of Concerns: Application Logic vs. Creation Logic

July 11, 2008 at 8:58 am 6 comments


Im Google-Testing-Blog ist mal wieder ein schöner Artikel erschienen: How to Think About the “new” Operator with Respect to Unit Testing. Inhaltlich ist es nicht wirklich neu: Objekterzeugung mit new in Klassen mit Logik ist gefährlich, weil das isolierte Testen kleiner Einheiten erschwert wird. Stattdessen sollte man die Objekterzeugung separieren und Dependency-Injection verwenden.
Auch wenn diese Erkenntnis nicht neu ist, kann sie wahrscheinlich gar nicht oft genug wiederholt werden – viel zu vielen Entwicklern scheint sie fremd zu sein.

Und dann schimmert durch den Artikel noch eine generelle Forderung durch: “Trenne Anwendungslogik immer von Erzeugungslogik”. Die meisten Entwickler, die sich der new-Problematik bewusst sind, lagern nicht alle Objekterzeugungen aus. Sie machen das nur an den Stellen, wo es zum Testen auch notwendig ist und das sind längst nicht alle Stellen. Die Erzeugung generell auszulagern, bedeutet etwas erhöhten Programmieraufwand (weil man z.B. Factories schreibt, obwohl man von der Flexibilität zur Zeit keinen Gebrauch macht). Möglicherweise lohnt sich dieser Zusatzaufwand: man muss weniger überlegen, bekommt einheitlicheren Code im Team und muss die Erzeugung später nicht refaktorisieren, wenn man doch isolieren will.

Entry filed under: Uncategorized. Tags: .

Passformgerechte Flip-Flops Testen mit C++, EXPECT und ASSERT

6 Comments Add your own

  • 1. Bernd Schiffer  |  July 11, 2008 at 5:02 pm

    1. Du profitierst von Factories schon dann, wenn es dadurch einfacher zu testen wird. Das reicht mir eigentlich als Motivation aus, Factories einzuführen, auch wenn der Produktivcode nicht von den Factories profitiert.

    2. Mag sein, dass ich gerade auf der Leitung hocke, aber an welchen Stellen ist es denn nicht notwendig, die Objekterzeugung auszulagern, damit man besser testen kann?

  • 2. Bernd Schiffer  |  July 11, 2008 at 5:02 pm

    1. Du profitierst von Factories schon dann, wenn es dadurch einfacher zu testen wird. Das reicht mir eigentlich als Motivation aus, Factories einzuführen, auch wenn der Produktivcode nicht von den Factories profitiert.

    2. Mag sein, dass ich gerade auf der Leitung hocke, aber an welchen Stellen ist es denn nicht notwendig, die Objekterzeugung auszulagern, damit man besser testen kann?

  • 3. Stefan Roock  |  July 11, 2008 at 7:10 pm

    1. Du profitierst von Factories schon dann, wenn es dadurch einfacher zu testen wird. Das reicht mir eigentlich als Motivation aus, Factories einzuführen, auch wenn der Produktivcode nicht von den Factories profitiert.
    Völlig klar. Da sind wir einer Meinung.

    2. Mag sein, dass ich gerade auf der Leitung hocke, aber an welchen Stellen ist es denn nicht notwendig, die Objekterzeugung auszulagern, damit man besser testen kann?
    Du hast einen Auftrag und Auftragspositionen. Da ist es selten notwendig, Aufträge und Auftragspositionen isoliert voneinander zu testen. Ergo könnte man dem Auftrag den Job geben, die Auftragspositionen mit new zu erzeugen.

  • 4. Stefan Roock  |  July 11, 2008 at 7:10 pm

    1. Du profitierst von Factories schon dann, wenn es dadurch einfacher zu testen wird. Das reicht mir eigentlich als Motivation aus, Factories einzuführen, auch wenn der Produktivcode nicht von den Factories profitiert.
    Völlig klar. Da sind wir einer Meinung.

    2. Mag sein, dass ich gerade auf der Leitung hocke, aber an welchen Stellen ist es denn nicht notwendig, die Objekterzeugung auszulagern, damit man besser testen kann?
    Du hast einen Auftrag und Auftragspositionen. Da ist es selten notwendig, Aufträge und Auftragspositionen isoliert voneinander zu testen. Ergo könnte man dem Auftrag den Job geben, die Auftragspositionen mit new zu erzeugen.

  • 5. Bernd Schiffer  |  July 11, 2008 at 7:39 pm

    Danke fürs Beispiel, jetzt wird’s klar: Wenn Du die Unit über mehrere Klassen spannst, dann ist das okay, new intern zuzulassen.

  • 6. Bernd Schiffer  |  July 11, 2008 at 7:39 pm

    Danke fürs Beispiel, jetzt wird’s klar: Wenn Du die Unit über mehrere Klassen spannst, dann ist das okay, new intern zuzulassen.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed



%d bloggers like this: