2009-07-01 16 views
7

Tengo un objeto bajo prueba que realiza una llamada bastante complicada a un objeto de acceso a datos. Parece algo así comoAssertWasCalled in rhino mocks

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

En mi estructura de la prueba que tengo una versión burlado del objeto y quiero probar que doSomething fue llamado con somestring == "valor1" y someObject.porpertyA == "valor2".

No puedo usar la simple sobrecarga de AssertWasCalled() porque no sé (o me preocupa) algúnOtroObjeto. Noto otra sobrecarga que toma una acción para las restricciones de configuración, pero nunca la he visto usar.

Respuesta

18

Pedazo de torta:

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 obras greaat. La única otra cosa que encontré útil fue usar Arg .Matches (y => y.property == whatever); para verificar valores en los objetos de argumento. – captncraig

+0

Sí, lo sé, simplemente no se presentó, por simplicidad. ¡Disfrutar! – zvolkov

4

Eche un vistazo a documentation for constraints.

sospecho que desee:

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); 
Cuestiones relacionadas