Ich habe eine Modellfamilie mit einer Methode, location
die die location
Ausgaben anderer Objekte, Mitglieder, zusammenführt. (Mitglieder sind mit Familien verbunden, aber das ist hier nicht wichtig.)
Zum Beispiel gegeben
- member_1 hat
location
== 'San Diego (Reisen, Rückkehr am 15. Mai)' - member_2 hat
location
== 'San Diego'
Family.location gibt möglicherweise 'San Diego (Mitglied_1 reist, kehrt am 15. Mai zurück)' zurück. Die Einzelheiten sind unwichtig.
Um das Testen von Family.location zu vereinfachen, möchte ich Member.location stubben. Ich brauche es jedoch, um zwei verschiedene (angegebene) Werte wie im obigen Beispiel zurückzugeben. Im Idealfall würden diese auf einem Attribut von basieren member
, aber die einfache Rückgabe verschiedener Werte in einer Sequenz wäre in Ordnung. Gibt es eine Möglichkeit, dies in RSpec zu tun?
Es ist möglich, die Member.location-Methode in jedem Testbeispiel zu überschreiben, z
it "when residence is the same" do
class Member
def location
return {:residence=>'Home', :work=>'his_work'} if self.male?
return {:residence=>'Home', :work=>'her_work'}
end
end
@family.location[:residence].should == 'Home'
end
aber ich bezweifle, dass dies eine gute Praxis ist. Wenn RSpec eine Reihe von Beispielen ausführt, wird in keinem Fall die ursprüngliche Klasse wiederhergestellt, sodass diese Art der Überschreibung nachfolgende Beispiele "vergiftet".
Gibt es also eine Möglichkeit, dass eine Stubbed-Methode bei jedem Aufruf unterschiedliche, angegebene Werte zurückgibt?