Нечувствительные к регистру ожидания в Rhino Mocks - PullRequest
2 голосов
/ 11 апреля 2010

Я использую Rhino Mocks, чтобы ожидать звонка. Есть единственный параметр, который является строкой. Но я не беспокоюсь о случае строки. Я хочу, чтобы тест прошел, даже если дело не в порядке. Поэтому я делаю следующее:

//expect log message to be called with a string parameter.  
//We want to ignore case when verifying so we use a constraint 
//instead of a direct parameter

Expect.Call(delegate { logger.LogMessage(null); })
      .Constraints(Is.Matching<string>(x => x.ToLower()=="f2"));

Это кажется немного скучным. Есть ли более разумный способ сделать это?

Ответы [ 2 ]

2 голосов
/ 11 апреля 2010
// arrange
var loggerStub = MockRepository.GenerateStub<ILogger>();

// act
loggerStub.LogMessage("f2");

// assert
loggerStub.AssertWasCalled(
    x => x.LogMessage(Arg<string>.Matches(
        s => string.Equals(s, "f2", StringComparison.OrdinalIgnoreCase)
    ))
);

Если вас не интересуют параметры, а только вызов метода:

loggerStub.AssertWasCalled(
    x => x.LogMessage(null),
    x => x.IgnoreArguments()
);
1 голос
/ 11 апреля 2010

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

 private bool CaseInsensitive( string s, string t )
 {
      return string.Equals( s, t, StringComparison.OrdinalIgnoreCase );
 }

 var loggerMock = MockRepository.GenerateMock<Logger>();

 loggerMock.Expect( l => l.LogMessage( Arg<string>.Matches( s => CaseInsensitive( s, "f2" ))));

 classUnderTest.MethodUnderTest();

 loggerMock.VerifyAllExpectations();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...