Ich mag die Art, wie Cucumber
Benutzerspezifikationen mit Integrationstests verbindet. Der Cucumber
-Teil ist mir mehr oder weniger klar.
Ich kämpfe, wenn es darum geht, was mit rspec (Nicht-Integrationstests) getestet werden soll und was nicht.
Ist es richtig, einen Unit-Test mit rspec
etwas zu testen, das bereits mit Cucumber
getestet wurde (zB Unit-Test scheitert 100%, wenn der Cucumber-Test fehlschlägt, und Unit-Test wird 100% erfolgreich sein, wenn der Cucumber-Test erfolgreich ist)? / p>
Um genau zu sein, habe ich drei Beispiele, die ich gerne lösen würde.
Hier ist ein Fall aus dem RSpec-Buch.
Sie haben folgende Cucumber scenario
:
Sie erstellen zwei rspec-tests
direkt nach:
Ein weiteres Beispiel ist das Testen von Routing oder Aktionsumleitung, während das folgende Szenario gilt:
%Vor% Manchmal testen wir Helfer, die bereits mit Cucumber
getestet wurden:
Ich sollte wahrscheinlich Helfer testen, der 283 Minuten in "4:43" bricht, aber es stellt sich heraus, dass es bereits mit Cucumber
getestet wurde.
Es sind vielleicht nicht die besten Beispiele, aber es illustriert, wovon ich spreche.
Für mich sind diese Tests Duplikate.
Könnten Sie bitte die obigen Beispiele kommentieren?
Gibt es irgendwelche Prinzipien oder Richtlinien dazu, was mit rspec
getestet werden soll, wenn Cucumber tests
bereits vorhanden sind?
All dies ist nur meine persönliche Meinung zu diesem breiten und offenen Thema. Manche Leute können nicht zustimmen und lustig genug können sie.
Als allgemeine Richtlinien sollten Sie Gurke verwenden, um den gesamten Anwendungsstapel zu testen, was als user experience bezeichnet wird. Dieser Anwendungsstapel könnte aus vielen kleineren unabhängigen Objekten bestehen, aber genauso wie Benutzer mit Ihrer Anwendung nicht an diesen Details interessiert wäre, sollte sich Ihr Gurken Test nicht interessieren sie und konzentrieren sich stattdessen auf äußere Schicht Ihrer Anwendung.
RSpec ( in Ihrem Setup! ) sollte sich andererseits auf diese kleinen Objekte konzentrieren, Bausteine Ihrer Anwendung.
Es gibt ein großes Problem mit kleinen Anwendungsbeispielen aus den Büchern: Sie sind zu klein!
Der Übergang zwischen der äußeren Schicht Ihrer Anwendung und ihren Innenräumen ist verschwommen. Ganze Anwendung wird mit zwei Objekten erstellt! Es ist schwer zu unterscheiden, was was testen soll. Wenn Ihre Anwendung an Größe zunimmt, wird es immer offensichtlicher, was ein Benutzererfahrungstest (Gurke) ist und was Objekt - Status Test / Nachrichtenerwartungstest (RSpec) ist.
Verwenden Sie Ihr zweites Beispiel:
Mit dieser Gurkengeschichte:
%Vor%Rspec:
Sie werden wahrscheinlich ein Benutzermodell haben:
Sie können eine Art Authentifizierungsobjekt haben:
Was ist, wenn sich Ihre Authentifizierungsdatenbank auf einem anderen Server befindet?
Und yada yada yada ... Für immer schützt Ihr Gurken-Test den allgemeinen Zweck Ihrer Anwendung Benutzer-Login . Auch wenn Sie unter dieser Haube Verhalten hinzufügen oder ändern, können Sie sicher sein, dass sich der Benutzer anmelden kann.
Im Allgemeinen ist Ihre Frage zu breit und Sie werden nicht eine einzige Antwort finden, unterschiedliche Leute werden unterschiedliche Ideen haben. Worauf du dich konzentrieren solltest, ist, so gut du kannst zu testen und mit der Zeit wirst du definitiv richtigen Weg für dich finden. Kein großer Testanzug ist viel besser als keiner.
Weil gutes Design hilft, einen guten Test zu schreiben, würde ich Praktisches objektorientiertes Design in Ruby: Agile Primer empfehlen > von Sandi Metz (das ist eines der besten Bücher, die ich gelesen habe)
Tags und Links ruby-on-rails testing rspec bdd cucumber