2010-03-18 12 views
7

Ich mochte es nie, Mocks zu schreiben und vor einiger Zeit empfahl jemand hier, FakeWeb zu verwenden. Ich habe mich sofort in FakeWeb verliebt. Ich muss mich jedoch fragen, ob es einen Nachteil für die Verwendung von FakeWeb gibt. Es scheint, als ob Mocks immer noch viel häufiger sind, also frage ich mich, was ich vermisse, ist falsch mit FakeWeb stattdessen zu verwenden. Gibt es eine bestimmte Art von Fehlern, die Sie mit Fakeweb nicht abdecken können, oder ist es etwas über den TDD- oder BDD-Prozess?Nachteile bei der Verwendung von FakeWeb im Vergleich zum Schreiben von Mocks zum Testen

Antwort

8

Sie sollten einen Blick auf WebMock nehmen http://github.com/bblimke/webmock

Der Nachteil HTTP-Anfragen von spöttischen ist der Mangel an Schutz vor Fern API-Änderungen. Wenn sich der Remote-HTTP-Dienst ändert und Ihr Code nicht mehr kompatibel ist, werden Ihre Tests Sie nicht darüber informieren. Wenn Sie die HTTP-Client-Methoden selbst ausprobieren, haben Sie die gleichen Probleme. Es ist gut, eine Integrationstest-Suite zu haben, die bestätigt, dass Ihr Code immer noch mit einem echten http-Dienst kommunizieren kann.

Der Vorteil der Bibliothek wie FakeWeb oder WebMock ist die Tatsache, dass Sie das Verhalten bei der Umsetzung statt sich Gedanken über die Details der Implementierung von spezifischen HTTP-Client-Bibliothek konzentrieren können. Selbst wenn Sie die Bibliothek beispielsweise von Net :: HTTP in RestClient ändern, sollte das Verhalten dennoch beibehalten werden, damit die Tests weiterhin bestehen. Wenn Sie den HTTP-Client selbst verspotten, müssen Sie die Tests ändern, wenn Sie die Implementierung ändern, selbst wenn sich das Verhalten nicht geändert hat. Mit FakeWeb oder Webmock hilft auch bei TDD oder BDD (Test zuerst). Sie können das HTTP-Verhalten mit Spezifikationen oder Tests angeben, bevor Sie sich über Implementierungsdetails eines bestimmten HTTP-Clients Gedanken machen.

19

Sie werden wahrscheinlich mit VCR, die ein Wrapper um HTTP Mocking-Bibliotheken ist, glücklich werden. Es speichert die ursprünglichen HTTP-Anforderungen zwischen, so dass Ihre Tests schnell sind und offline arbeiten. Sie können jedoch auch geändert werden, um die ursprüngliche Anforderung erneut auszuführen, um zu sehen, ob der Test gegen die Remote-API funktioniert.

https://github.com/myronmarston/vcr

Verwandte Themen