Проверяющий обработчик событий существует в Moq vs Rhino Mocks - PullRequest
1 голос
/ 20 февраля 2012

Я хочу иметь возможность проверить, подписан ли объект на событие. В Rhino Mocks приведенный ниже код подтверждает это, однако я не могу найти способ сделать это в Moq.

public class Presenter
{
    IView view;
    public Presenter(IView view)
    {
        this.view = view;
        this.view.Load += new EventHandler(view_Load);
    }
    void view_Load(object sender, EventArgs e)
    {
        throw new Exception("Not implemented.");
    }
}


[Test]
public void VerifyAttachesToViewEvents()
{
    MockRepository mocks = new MockRepository();
    IView viewMock = (IView)mocks.CreateMock(typeof(IView));
    using (mocks.Record())
    {
        viewMock.Load += null;
        LastCall.IgnoreArguments();
    }
    new Presenter(viewMock);
    mocks.VerifyAll();
}

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Похоже, что в Moq * отсутствует ошибка / функция http://code.google.com/p/moq/issues/detail?id=100

1 голос
/ 20 февраля 2012

Я бы вызвал событие и проверил, было ли выброшено исключение.В любом случае вам, вероятно, нужно проверить, выполняется ли какая-то логика в вашем SUT, а не только на то, что на событие было подписано:

[Test]
public void VerifyAttachesToViewEvents()
{
    // arrange
    var mock = new Mock<IView>();
    new Presenter(mock.Object);

    // act
    Action action = () => mock.Raise(view => view.Load += null, EventArgs.Empty);

    // assert
    action.ShouldThrow<Exception>()
        .WithMessage("Not implemented.");
}

Я не был уверен, какую платформу модульного тестирования вы используете, поэтому использовал свободноутверждения в части утверждения.Если вы используете NUnit, код может быть:

[Test]
public void VerifyAttachesToViewEvents()
{
    // arrange
    var mock = new Mock<IView>();
    new Presenter(mock.Object);

    // act & assert
    Assert.Throws<Exception>(() => 
         mock.Raise(view => view.Load += null, EventArgs.Empty));
}
...