Aus dem Interview mit Kent Beck in einer aktuellen Ausgabe des Java Magazine:
Binstock: Lassen Sie uns über Microservices sprechen. Es scheint mir, dass Test-First auf Microservices in dem Sinne kompliziert werden würde, dass einige Dienste, um zu funktionieren, das Vorhandensein einer ganzen Reihe anderer Dienste benötigen. Sind Sie einverstanden?
Beck: Es scheint dasselbe zu sein, wenn man eine große Klasse oder viele kleine Klassen hat.
Binstock: Richtig, außer ich denke, hier müssen Sie eine Menge Mocks verwenden, um ein System einrichten zu können, mit dem Sie einen bestimmten Dienst testen können.
Beck: Ich bin anderer Meinung. Wenn es sich um einen imperativen Stil handelt, müssen Sie viele Mocks verwenden. In einem funktionalen Stil, in dem externe Abhängigkeiten hoch oben in der Aufrufkette gesammelt werden, halte ich das nicht für notwendig. Ich denke, Sie können durch Unit-Tests viel Berichterstattung erhalten.
Was meint er? Wie kann der funktionale Stil Sie davon befreien, sich über externe Abhängigkeiten lustig zu machen?
Antworten:
Eine reine Funktion ist eine, die:
Angenommen, wir schreiben Code für die Benutzeranmeldung, in dem wir überprüfen möchten, ob der angegebene Benutzername und das angegebene Kennwort korrekt sind, und verhindern, dass sich der Benutzer anmeldet, wenn zu viele Fehlversuche auftreten. In einem imperativen Stil könnte unser Code folgendermaßen aussehen:
Es ist ziemlich klar, dass dies keine reine Funktion ist:
username
undpassword
Kombination als das Ergebnis hängt auch von dem Benutzerdatensatz in der Datenbank gespeichert.Beachten Sie auch, dass wir zum Testen dieser Funktion zwei Datenbankaufrufe verspotten müssen,
FindUser
undRecordFailedLoginAttempt
.Wenn wir diesen Code in einen funktionaleren Stil umgestalten würden, könnten wir am Ende etwas Ähnliches erhalten:
Beachten Sie, dass die
UserLogin
Funktion zwar immer noch nicht rein ist, dieUserLoginPure
Funktion jetzt jedoch eine reine Funktion ist. Infolgedessen kann die Kernlogik der Benutzerauthentifizierung auf Einheit getestet werden, ohne dass externe Abhängigkeiten verspottet werden müssen. Dies liegt daran, dass die Interaktion mit der Datenbank weiter oben im Aufrufstapel erfolgt.quelle