Worin besteht in RSpec der Unterschied zwischen einer Nachrichtenerwartung (receive) und einem Testspy (have_received)?

8

In RSpec (speziell rspec -mocks ), was ist der Unterschied zwischen Nachrichtenerwartungen und Test Spies ? Sie scheinen ähnlich zu sein und erscheinen nebeneinander als separate Abschnitte in der Infodatei.

d. Was ist der Unterschied zwischen:

%Vor%

und

%Vor%     
ben 18.01.2014, 22:41
quelle

2 Antworten

6

Nachrichtenerwartungen können auf any -Objekt gesetzt werden und stellen eine Deklaration dar, dass etwas mit diesem Objekt in der Zukunft passieren wird (oder nicht passiert). Wenn die Erwartung während der nachfolgenden Testausführung verletzt wird, wird der Test zum Zeitpunkt des Verstoßes fehlschlagen. Wenn die Erwartung am Ende des Tests nicht erfüllt ist, wird der Test ebenfalls fehlschlagen.

Die have_received -Familie von Methoden funktioniert nur bei Testdoppelwerten und untersucht, was mit dem doppelten in der Vergangenheit passiert ist, vom Zeitpunkt der Erstellung des Doppelpunkts bis zum aktuellen Methodenaufruf. Es gelingt oder scheitert zu diesem Zeitpunkt. Der Begriff "Testspion" ist ein wenig irreführend, da die Unterstützung für diesen rückwärtsgerichteten Mechanismus an dieser Stelle ein Standardteil von rspec-Mocks ist. Sie machen nichts "Besonderes", um einen "Testspion" zu erstellen.

    
Peter Alfvin 19.01.2014, 00:10
quelle
3

Du kannst Spione nicht immer benutzen, wenn du testest, im Grunde für Erwartungen an Klassen.

Beispiel:

%Vor%

Es gibt keine Möglichkeit, dies mit einem Spion zu tun (es sei denn, Sie machen eine Abhängigkeitsinjektion).

Nun könnten Sie Folgendes tun:

%Vor%

Sie sehen das klar:

  • Sie müssen die Erwartungen an ein echtes Objekt festlegen, bevor Sie den echten Code ausführen (es sieht irgendwie komisch aus, vor dem Auslösen des Codes Erwartungen zu setzen)

  • Sie können die Erwartungen an Spione nach dem echten Code festlegen, was natürlicher ist

apneadiving 18.01.2014 22:51
quelle