Pregunta

Tengo una propiedad en una interfaz que he burlado usando burla de Rhino. Quiero saber si se ha accedido en mi unidad de prueba.

¿Hay una manera de ver si se accede a la propiedad a través de burla de Rhino?

He encontrado este código aquí pero no parece funcionar:

string name = customerMock.Name;
customerMock.AssertWasCalled(x => {var ignored = x.Name;});

I reproducido este código y me sale el siguiente:

Rhino.Mocks.Exceptions.ExpectationViolationException: IAddAddressForm.get_FirstName(); Expected #1, Actual #0..

Me gustaría utilizar esta sintaxis, pero debo estar perdiendo algo. Estoy llamando con un talón (no es un simulacro) eso hace una diferencia?

¿Fue útil?

Solución 2

Resulta que la sintaxis que estaba usando hace el trabajo. Pero sólo funciona si la propiedad no está en modo PropertyBehavior. (¿Cuál es el valor predeterminado para los talones y se puede activar de burla).

Una vez que el modo PropertyBehavior está activada, a continuación, que la sintaxis no funciona. De acuerdo con Ayende hay que comprobar el valor en ese punto.

Otros consejos

  

¿Hay una manera de ver si la propiedad   se accede a través de burla de Rhino?

Sí. Puede configurar una expectativa para la propiedad. Si la verificación no tira, entonces usted sabe que se accede a la propiedad:

var mocks = new MockRepository();
IFoo foo = mocks.DynamicMock<IFoo>;
// this sets up an expectation that Name is accessed, and what it should return
Expect.Call(foo.Name).Return("John Doe"); 
mocks.ReplayAll()

// test something that uses IFoo here ...

mocks.VerifyAll();  // Throws if foo.Name was not accessed after ReplayAll()

Todo esto es suponiendo que desea acceder foo.Name. Si su objetivo es verificar que se trata de no se accede, a continuación, sólo debe utilizar en lugar de StrictMock DynamicMock. Una maqueta estricta tirará de las llamadas inesperadas.

Si desea afirmar que un método se llama o una propiedad visitada en un objeto falsificado, siempre debe utilizar una maqueta. Talones son para aquellas situaciones en las que no desea poner a prueba la interacción, sino que sólo quiere asegurarse de que una llamada a un objeto devuelve un valor determinado para hacer que el flujo lógico.

Creo StrictMock es lo que estas buscando. Hay alguna información al respecto aquí . Es el uso de se dice que se desanime porque puede hacer pruebas demasiado frágil, sin embargo, debería ayudar a lograr lo que estamos tratando de hacer.

Puede comprobar la pila de llamadas utilizando la clase StackFrame. No muy limpio, pero debe dar el resultado deseado ...

Yo suelo usar Moq que utiliza el castillo de lo que podríamos considerar en su lugar / junto con de burla de Rhino. Así es como se puede hacer allí:

// expects an invocation to set the value to "foo"
mock.SetupSet(foo => foo.Name = "foo");

// or verify the setter directly
mock.VerifySet(foo => foo.Name = "foo");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top