【问题标题】:Case insensitive expectations in Rhino MocksRhino Mocks 中不区分大小写的期望
【发布时间】:2010-04-11 11:58:42
【问题描述】:

我正在使用 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"));

好像有点啰嗦。有没有更明智的做法?

【问题讨论】:

    标签: c# unit-testing case rhino-mocks


    【解决方案1】:
    // 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()
    );
    

    【讨论】:

    • 我认为他想验证字符串,但不关心大小写。这些都没有。
    【解决方案2】:

    我会使用@Darin 建议(或类似)的 AAA 格式。我认为它更简洁,但我认为您仍然必须使用相同的基本约束来进行不区分大小写的匹配。辅助方法可以使其更具可读性。

     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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 2013-03-06
      相关资源
      最近更新 更多