25
如何使用Rhino Mocks從模擬/存根提升事件?使用Rhino Mocks從模擬/存根提高事件
我在網上發現了這個問題的一些答案,但它們似乎都使用了Record/Replay語法,但我使用了Arrange/Act/Assert語法。
有什麼建議嗎?
一個小例子...
比方說,我使用的MVVM模式,有這樣的模型類:
public class MyModel
{
private int _myValue;
public event EventHandler ValueChanged;
public void SetValue(int newValue)
{
_myValue = newValue;
if (ValueChanged != null)
{
ValueChanged(this, null);
}
}
}
正如你所看到班裏有一個整數值和方法設置它。當設置該值時,會引發ValueChanged
事件。
這個模型類由一個視圖模型:
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; }
}
當它引發此視圖模型聽取模型和更新ValueChanged
事件。
現在我想測試當模型引發事件時更新視圖模型。
[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);
}
請注意,這只是一個例子,而不是我的實際代碼(這更復雜)。我希望你能忽視任何錯別字和其他小錯誤。