2011-01-17 1 views
0

ein Mock-Objekt gegeben, ich möchte eine Methode mehrmals während der Lebensdauer des Objekts neu zu mock, etwa so:Können verspottete Methoden aus einem FlexMock-Objekt in Ruby entfernt werden?

mock = flexmock 
[ :foo, :bar ].each do |val| 
    mock.should_receive(:my_method).and_return val 
    assert_equal val, mock.my_method, "my_method" 
end 

jedoch nicht für diesen Test ausführen:

my_method. 
<:bar> expected but was 
<:foo>. 
bar

Grundsätzlich wird FlexMock eine bestehende Erwartung nicht aktualisieren. Irgendwelche Ideen (nicht „verwenden Mocha/andere Mockframework)?

Antwort

0

Es geht direkt auf dem FlexMock Objekt Hacking, aber das ist The Ruby Way, schließlich;.!)

def clear_mocked_method(mock, method) 
    mock.instance_eval { @expectations.delete method.to_sym } 
    end 
0

in Rspec würde ich Kontexte, dies zu tun und es zu verspotten, wie ich es erwartet in einer Reihe von Tests zu sein. (Dann wäre es anders sein in der nächster Kontext für die nächste Serie)

möglicherweise müssen einig Kompaktheit für einige Korrektheit aufgeben

+0

Geben Sie bitte ein Beispiel? Ich kann Ihrem s nicht ganz folgen uggestion. Vielen Dank! –

Verwandte Themen