Как я могу поднять событие из макета/заглушки с помощью 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
.
Этот класс модели используется viewmodel:
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);
}
Обратите внимание, что это всего лишь пример, а не мой фактический код (что более сложно). Надеюсь, вы можете игнорировать любые опечатки и другие мелкие ошибки.