Создание событий из макета / заглушки с помощью Rhino Mocks

Как я могу вызвать событие из mock / stub с использованием Rhino Mocks?

Я нашел несколько ответов на этот вопрос в Интернете, но все они, похоже, используют синтаксис записи / воспроизведения, но я использую синтаксис 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);
}

Обратите внимание, что это всего лишь пример, а не мой реальный код (который более сложен). Надеюсь, вы сможете не обращать внимания на опечатки и другие мелкие ошибки.

26
задан Simon MᶜKenzie 20 June 2013 в 00:08
поделиться