2009-07-01 88 views
7

我有一個對象正在測試,使一個相當複雜的數據訪問對象的調用。它看起來就像AssertWasCalled在犀牛模擬

object.DoSomething(somestring,someObject,someOtherObject,someOtherOtherObject)

在我的測試結構,我有對象的嘲笑版本,我想測試得到的DoSomething調用somestring ==「值1」和someObject.porpertyA ==「值2」。

我不能使用簡單的AssertWasCalled()重載,因爲我不知道(或關心)someOtherObject。我注意到另一個重載需要一個設置約束的動作,但我從來沒有見過使用它。

回答

18

海賊王:

yourstub.AssertWasCalled(
      x => x.DoSomething(
       Arg<string>.Is.Equal("value1"), 
       Arg<someObjectType>.Is.Equal(value2), 
       Arg<someOtherObjectType>.Is.Anything, <======== NOTE THIS! 
       Arg<someOtherOtherObjectType>.Is.Equal(value3) 
      ) 
); 
+4

看過那部作品greaat。我發現唯一有用的其他東西是使用Arg .Matches(y => y.property ==什麼);用於檢查參數對象上的值。 – captncraig 2009-07-01 19:40:11

4

看看documentation for constraints

我懷疑你想:蛋糕

Expect.Call(object.DoSomething(null, null, null, null) 
     .IgnoreArguments() // Ignore those nulls 
     .Constraints(Is.Equal("value1"), 
        Property.Value("PropertyA", "value2"), 
        Is.Anything(), 
        Is.Anything()) 
     .Return(whateverItShouldReturn);