Wie kann ich ein Ereignis von einem Mock/Stub mit Rhino Mocks auslösen?Ereignisse aus einem Mock/Stub mit Rhino Mocks auslösen
Ich habe einige Antworten auf diese Frage im Internet gefunden, aber sie scheinen alle die Record/Replay-Syntax zu verwenden, aber ich verwende die Arrange/Act/Assert-Syntax.
Irgendwelche Vorschläge?
Ein kleines Beispiel ...
Lassen Sie uns sagen, dass ich das MVVM Muster bin mit und dieses Modell Klasse haben:
public class MyModel
{
private int _myValue;
public event EventHandler ValueChanged;
public void SetValue(int newValue)
{
_myValue = newValue;
if (ValueChanged != null)
{
ValueChanged(this, null);
}
}
}
Wie Sie die Klasse einen Integer-Wert und ein Verfahren hat sehen können, dass setzt es. Wenn der Wert festgelegt wird, wird ein ValueChanged
Ereignis ausgelöst.
Diese Modellklasse wird durch ein Ansichtsmodell verwendet:
public class MyViewModel
{
private MyModel _myModel;
public MyViewModel(MyModel myModel)
{
_myModel = myModel;
_myModel.ValueChanged += ValueChangedHandler;
}
private void ValueChangedHandler(object sender, EventArgs e)
{
MyString = "Value has changed";
}
public string MyString { get; set; }
}
Das Ansichtsmodell zum ValueChanged
Ereignisse auf dem Modell und Updates hören, wenn sie angehoben wird.
Jetzt möchte ich testen, dass das Viewmodel aktualisiert wird, wenn das Modell das Ereignis auslöst.
[TestMethod]
public void MyViewModel_ModelRaisesValueChangedEvent_MyStringIsUpdated()
{
//Arrange.
var modelStub = MockRepository.GenerateStub<MyModel>();
MyViewModel viewModel = new MyViewModel(modelStub);
//Act
-HERE I WANT TO RAISE THE VALUE CHANGED EVENT FROM modelStub.
//Assert.
Assert.AreEqual("Value has changed", viewModel.MyString);
}
Beachten Sie, dass dies nur ein Beispiel ist und nicht mein tatsächlicher Code (der komplexer ist). Ich hoffe, Sie können Tippfehler und andere kleine Fehler ignorieren.