Как установить вызов Expect, чтобы проверить, что метод не вызывается в Rhino Mocks - PullRequest
23 голосов
/ 29 июля 2011

Используя Rhino Mocks, как я могу гарантировать, что метод не вызывается при настройке Ожидания для фиктивного объекта.

В моем примере я тестирую метод Commit и мне нужно убедиться, чтоМетод отката не вызывается при выполнении фиксации.(это потому, что у меня есть логика в методе фиксации, который автоматически откатится, если фиксация не удалась)

Вот как выглядит код ..

[Test]
public void TestCommit_DoesNotRollback() 
{
    //Arrange
    var mockStore = MockRepository.GenerateMock<IStore>();
    mockStore.Expect(x => x.Commit());
    //here i want to set an expectation that x.Rollback() should not be called.

    //Act
    subject.Commit();

    //Assert
    mockStore.VerifyAllExpectation();
}

Конечно, я могу сделать это вФаза утверждения такова:

mockStore.AssertWasNotCalled(x => x.Rollback());

Но я бы хотел установить это как ожидание.

Ответы [ 4 ]

35 голосов
/ 30 июля 2011

Другой вариант будет:

mockStore.Expect(x => x.Rollback()).Repeat.Never();
8 голосов
/ 29 июля 2011

Это то, что вы ищете?

ITest test = MockRepository.GenerateMock<ITest>();
test.Expect(x => x.TestMethod()).AssertWasNotCalled(mi => {});
3 голосов
/ 01 августа 2011

Вот еще один вариант:

        mockStore.Stub(x => x.DoThis()).Repeat.Times(0);

        //EXECUTION HERE 

        x.VerifyAllExpectations();
2 голосов
/ 10 апреля 2015

Для этого случая я создал метод расширения, чтобы лучше показать свое намерение

public static IMethodOptions<RhinoMocksExtensions.VoidType> ExpectNever<T>(this T mock, Action<T> action) where T : class
{
    return mock.Expect(action).IgnoreArguments().Repeat.Never();
}

Примечание вызов IgnoreArguments ().Я предполагаю, что вы не хотите, чтобы метод вызывался никогда ... независимо от значения параметра.

...