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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top