Wie teste ich Testcode, der eine Fluent-Schnittstelle verwendet?

9

Ich habe ein paar kleine fließende Interfaces durch Methodenverkettung erstellt. Sie rufen normalerweise eine Reihe von Repositories auf, die Daten von Webservices / Datenbanken abrufen.

Wie sollte ich über Unit-Test-Methoden gehen, die die fließende Schnittstelle verwenden?

%Vor%

Ich kann die einzelnen Komponenten der fließenden Schnittstelle einzeln testen, aber wenn ich die FindComputers-Methode oben testen möchte, was soll ich tun?

  1. Verwenden Sie die konkrete Implementierung der fließenden Schnittstelle und schreiben Sie Erwartungen an die Repository-Klassen
  2. Mische die flüssige Oberfläche selbst und setze Erwartungen darauf
  3. Testen Sie nur die fließende Schnittstelle selbst und nicht die FindComputers () -Methode

Ich würde gerne einen leicht zu wartenden Ansatz finden.

    
Andronicus 17.08.2009, 22:06
quelle

3 Antworten

3

Ich denke, dass der FI mehr tut, als er braucht. Ich nehme an, dass Sie Computer als Data Mapper verwenden und auch zum Erstellen einer Abfrage verwenden. Aus dem, was Sie gezeigt haben, ist die Abfrage aufgebaut:

%Vor%

und so weiter ...

Nun scheinen einige dieser Regeln, die implementiert werden können, falsch zu sein. Regel 2 und Regel 3 scheinen miteinander zu kreuzen. Regel 5 und Regel 6 macht was? Ist das in Ordnung?

Weil Sie ein Objekt implementiert haben, das SRP unterbricht. Der erste Schritt besteht darin, den Abfrage-Generator vom Data Mapper zu trennen. Erstellen Sie Ihr FI-Abfrageobjekt, und übergeben Sie es dann an den Mapper.

Jetzt können Sie FindComputers testen und sicherstellen, dass das FI-Query-Objekt an einen Data Mapper gesendet wird. Da Sie jetzt ein FI-Query-Objekt erstellen können, können Sie es testen. Und Sie können testen, dass der Data Mapper ein Abfrageobjekt verwendet.

Was ist, wenn Sie in Zukunft Computer nach Standort finden möchten? Wenn Sie den gleichen Code behalten, den Sie geschrieben haben, müssten Sie eine Methode hinzufügen FindByLocation und bevor Sie es wissen, haben Sie ein Gott-Objekt. stinkend!

    
Gutzofter 18.08.2009, 16:02
quelle
1

Können Sie Ihre Repositories verspotten? Während einige für einen reineren Ansatz plädieren, bei dem Sie eine Methode einer Klasse isolieren müssen, wäre es eine gute Möglichkeit, zu testen, wie FindComputers und die fließende Oberfläche zusammenarbeiten. Und es kann einfacher sein, abhängig davon, wie die Repository-Zugriffsschicht aussieht.

    
Neil Whitaker 17.08.2009 22:50
quelle
0

Ich würde 2 + 3 machen. Unter der Annahme, dass die fließenden Schnittstellen echte Schnittstellen sind, sollten sie relativ einfach zu simulieren sein. Machen Sie sich einfach bewusst, dass jeder Schritt in der Aufrufkette wahrscheinlich ein neues Mock-Objekt zurückgibt, das wiederum den nächsten Aufruf in der Kette erwartet.

Sie sollten die fließende Oberfläche immer noch direkt testen, indem Sie die darunter liegende Repository-Ebene verspotten.

    
Frank Schwieterman 17.08.2009 22:26
quelle