In letzter Zeit scheint Cucumber mehr Unterstützung in der Rails-Community zu bekommen. Hier ist das kurze Argument, das ich aus einem Interview mit RSpecs Lead (aus einem alten Ruby on Rails-Podcast) gehört habe.
In der agilen Community gab es (zu der Zeit) einen großen Schub für Test Driven Development, mit dem Schwerpunkt, zuerst zu testen, um zu beweisen, dass man etwas ändern musste. Daran stimmte etwas Philisophisches nicht. Testen ist im Wesentlichen eine Möglichkeit, um zu überprüfen, ob Ihre Implementierung korrekt ist. Wie beurteilen Sie das Fahrdesign also anders? Der von Ihnen angegebene Vorsprung von RSpec wurde vermutet zuerst , und wäre es nicht großartig, wenn die Spezifikation auch die Ergebnisse Ihrer Implementierung überprüfte?
Das einfache Umbenennen assert
inshould
hilft dabei, den Geist auf die richtige Art und Weise zu fokussieren, um Spezifikationen zu schreiben und über Design nachzudenken. Dies ist jedoch nur ein Teil der Gleichung.
Wichtiger noch, da viele TDD-Anhänger behaupteten, dass die Tests das Design dokumentierten, war die meiste Dokumentation bestenfalls mangelhaft. Tests sind für Nicht-Entwickler, die mit der Sprache nicht vertraut sind, ziemlich undurchsichtig. Selbst dann ist das Design bei den meisten Tests nicht sofort erkennbar.
Als sekundäres Ziel entwickelte RSpec eine Möglichkeit, aus den Spezifikationen eine schriftliche Dokumentation zu erstellen. Es ist diese schriftliche Spezifikation, die RSpec einen Vorteil gegenüber der einfachen Test :: Unit verschafft, um das Design einer Anwendung voranzutreiben. Warum etwas mehrmals schreiben, wenn Sie gleichzeitig die Designkonsistenz dokumentieren und überprüfen können?
Ich verstehe, dass Gurke, die den Vorteil hatte, später zu kommen und Lehren aus RSpec zu ziehen, dieses sekundäre Ziel besser erfüllt, ohne das primäre Ziel zu verlieren (Fähigkeit, die Implementierung anhand der Spezifikation zu testen). Cucumber tut dies mit einer ziemlich englischen API, die Nicht-Programmierer vernünftigerweise verachten können. Sie benötigen möglicherweise Hilfe von Programmierern, um einige Definitionen für neue Überprüfungsmethoden auszufüllen, diese sind jedoch erweiterbar.
Fazit ist, dass RSpec / Cucumber das Testen von Einheiten nicht komplett ersetzen sollte. Sie sind möglicherweise besser geeignet, um Ihr Design zu dokumentieren und zu überprüfen. Es müssen jedoch noch einige Implementierungstests durchgeführt werden, insbesondere bei subtilen Fehlern, die von der Implementierung und nicht vom Design der Anwendung herrühren. Es reduziert jedoch die Anzahl der Tests, die Sie schreiben müssen.