Rhino Mocks:el aplastamiento del valor utilizado en la afirmación?
-
15-11-2019 - |
Pregunta
Mi primera pregunta y, a continuación, algunos detalles:
Q: Necesito a punta de el valor de una propiedad cuando asegurándose de que su valor se utiliza en una posterior cesión?
Detalles:
Estoy usando Rhino Mocks 3.5 AAA de sintaxis en MSpec clases.He recortado el código de abajo para mantenerlo (esperemos) fácil de asimilar.
*No Golpear _fooResultMock del Valor de la Propiedad:*
[Subject("Foo")]
public class when_foo {
Establish context = () => {
_fooDependencyMock.Stub(x => x.GetResult()).Return(_fooResultMock);
_foo = new Foo(_fooDependencyMock);
};
Because action = () => {
_foo.Whatever();
};
It should_set_the_name_field = () => {
_fooTargetMock.AssertWasCalled(x => x.Name = _fooResultMock.Name);
};
}
*Intermitencia _fooResultMock del Valor de la Propiedad:*
[Subject("Foo")]
public class when_foo {
Establish context = () => {
_fooDependencyMock.Stub(x => x.GetResult()).Return(_fooResultMock);
_fooResultMock.Stub(x => x.Name).Return(_theName); // _theName!
_foo = new Foo(_fooDependencyMock);
};
Because action = () => {
_foo.Whatever();
};
It should_set_the_name_field = () => {
_fooTargetMock.AssertWasCalled(x => x.Name = _theName); // _theName!
};
}
Lo importante para mi prueba es que el valor encontrado en _fooResultMock del Name
la propiedad se asigna a _fooTargetMock de la propiedad.
Por lo tanto, es el primer bloque de código adecuadamente la prueba de que, o es el segundo bloque de código (que stubs el valor de _fooResultMock del Name
de la propiedad) necesario?
Es el segundo bloque indeseables por alguna razón?
Solución
Algunas de las preguntas que se indique la respuesta correcta:
Es _fooResultMock un PartialMock de una clase concreta?Si es así, entonces si no stub Nombre, obtendrá el valor de los bienes de la clase Nombre de la propiedad.Si _fooResultMock NO es un PartialMock y no stub, obtendrá el valor predeterminado para el Nombre del tipo (probablemente null).
Lo _fooTargetMock?No se especifica en ningún lugar de la prueba.Se supone que eso para ser _foo lugar?
Estoy suponiendo que los resultados de simulacro no es un simulacro parcial;el caso principal es parcial burla es aislar algunos de los métodos de una sola clase de otros de la misma clase (burlándose de un archivo-método de escritura, por ejemplo, así que usted puede probar el método de cálculo que llama al archivo-método de escritura).En este caso, el primer bloque de código es básicamente la comparación de nulo a nulo, si el objetivo de burlarse de su Nombre de campo a partir de los resultados de simulacros o no.Así, el segundo bloque de código es una mejor prueba de si la cesión se produjo.