Ich ignoriere die besten Praktiken aus zwei Gründen:
- Eine Reihe von meinen Tests Regressionstests sind, ich möchte, dass sie schnell laufen, und sie brechen selten. Der Vorteil der Klarheit über genau , was bricht ist nicht riesig, und die Verlangsamung der Refactoring meines Codes , so dass es das gleiche Ereignis mehrmals ausgeführt wird, ist für mich Material.
- Ich bin ein bisschen manchmal faul, und es ist einfacher, nicht, dass refactor
Der Weg, dies ich tue, zu tun (wenn ich so tun müssen) ist auf die Tatsache verlassen, dass meine Datenbank startet leer, schreibe ich konnte so dann:
foo.bar
expect(Counter.count).to eq(1)
expect(Anothercounter.count).to eq(1)
meine Datenbank nicht leer In einigen Fällen ist, aber ich entweder weiß, die vor Graf, oder ich kann zählen für die vor explizit testen:
counter_before = Counter.count
another_counter_before = Anothercounter.count
foo.bar
expect(Counter.count - counter_before).to eq(1)
expect(Anothercounter.count - another_counter_before).to eq(1)
Finale ly, wenn Sie eine Menge von Objekten überprüfen Sie (ich manchmal tun) tun dies kann als:
before_counts = {}
[Counter, Anothercounter].each do |classname|
before_counts[classname.name] = classname.count
end
foo.bar
[Counter, Anothercounter].each do |classname|
expect(classname.count - before_counts[classname.name]).to be > 0
end
Wenn Sie mir ähnliche Bedürfnisse haben dies mein einziger Rat wäre dies funktionieren wird, zu tun mit Ihrem die Augen offen - die anderen vorgeschlagenen Lösungen sind eleganter, haben aber unter bestimmten Umständen nur ein paar Nachteile.
Manchmal führt dies zu einer Menge Standardcode (wenn eine Spezifikation eine komplexe Konfiguration erfordert). Oder vielleicht mache ich es einfach falsch :) –
Im Allgemeinen, wenn ich eine Menge Boilerplate tue, versuche ich, meinen Kontext/beschreiben Blöcke zu verfeinern, so dass ich das Setup in vor Blöcken machen kann. Das räumt normalerweise auf. –
Das ist alles in Ordnung für Modell/Unit-Tests, aber was ist mit Feature/Integration Tests, wo es normal ist, viele Behauptungen in einem Test zu machen? – Arcolye