2009-07-01 17 views
7

Mam obiekt poddany testowi, który wykonuje dość skomplikowane wywołanie obiektu dostępu do danych. Wygląda to mniej więcej takAssertWasCalled w rhino mocks

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

W moim struktury badanego Mam szydzili wersję obiektu i chcę sprawdzić, doSomething został wywołany z someString == „wartość1” i someObject.porpertyA == „wartość2”.

Nie mogę użyć prostego przeciążenia AssertWasCalled(), ponieważ nie znam (lub nie dbam o) someOtherObject. Zauważam kolejne przeciążenie, które wykonuje akcję związaną z ustawieniami, ale nigdy nie widziałem, żeby była używana.

Odpowiedz

18

kawałek tortu:

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

Thaat prace greaat. Jedyną inną rzeczą, którą uznałem za przydatną, było użycie Arg .Match (y => y.property == cokolwiek); do sprawdzania wartości w obiektach argumentów. – captncraig

+0

Tak, wiem, po prostu nie pokazałem, dla uproszczenia. Cieszyć się! – zvolkov

4

Spójrz na documentation for constraints.

Podejrzewam chcesz:

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); 
Powiązane problemy