簡體   English   中英

犀牛模型參數檢查…有更好的方法嗎?

[英]Rhino Mock Parameter Inspection … Is There a Better Way?

我正在使用Rhino Mocks 3.5來模擬需要2個參數的服務方法調用,並且我想確保正確設置對象的屬性。

// Method being tested
void UpdateDelivery( Trade trade )
{
    trade.Delivery = new DateTime( 2013, 7, 4 );
    m_Service.UpdateTrade( trade, m_Token ); // mocking this
}

這是我的代碼的一部分(有效)

service, trade, token declared / new'd up ... etc.
...

using ( m_Mocks.Record() )
{
    Action<Trade, Token> onCalled = ( tradeParam, tokenParam ) =>
            {
                // Inspect / verify that Delivery prop is set correctly
                // when UpdateTrade called
                Assert.AreEqual( new DateTime( 2013, 7, 4 ), tradeParam.Delivery );                     
            };

    Expect.Call( () => m_Service.UpdateTrade( Arg<Trade>.Is.Equal( trade ), Arg<Token>.Is.Equal( token ) ) ).Do( onCalled );
}

using ( m_Mocks.Playback() )
{
    m_Adjuster = new Adjuster( service, token );
    m_Adjuster.UpdateDelivery( trade );
}

有沒有更好,更簡潔,通俗易懂的方法來使用Rhino Mocks進行測試? 我看過一些使用約束的帖子,但我不喜歡通過字符串名稱標識屬性/值。

您可以執行以下操作:

Expect.Call(() => m_Service.UpdateTrade(
    Arg<Trade>.Matches(t => t.Delivery.Equals(new DateTime(2013, 7, 3))),
    Arg<Token>.Is.Anything)
);

另請注意,如果您不打算在此測試中驗證token參數,則可以對其使用Is.Anything約束。


注意:

使用Matches(Expression<Predicate<..>>)重載時,RhinoMocks 3.5和.NET4 +會引發AmbiguousMatchException。 如果無法更新到RhinoMocks 3.6(有原因),則仍然可以這樣使用Matches(AbstractConstraint)重載:

 Arg<Trade>.Matches(
   Property.Value("Delivery", new DateTime(2013, 7, 3)))

要么:

 Arg<Trade>.Matches(
   new PredicateConstraint<DateTime>(
     t => t.Delivery.Equals(new DateTime(2013, 7, 3))))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM