Pregunta

Soy bastante nuevo en burlarme, así que esto podría ser algo que todavía no estoy aprendiendo, pero no puedo encontrar un buen ejemplo en ningún lado.

Estoy tratando de afirmar que, por defecto, cualquier clase que herede de mi clase abstracta creará una colección en el constructor. Aquí está la clase abstracta:

public abstract class DataCollectionWorkflow : SequentialWorkflowActivity
{
        private readonly DataSet _output = new DataSet();
        private List<DataCollectionParameter> _params = null;

        public DataCollectionWorkflow()
        {
            _params = new List<DataCollectionParameter>();   
        }

        public virtual IList<DataCollectionParameter> Parameters
        {
            get { return _params; }
            set { _params = (List<DataCollectionParameter>)value; }
        }
}

¿Cómo me burlo de esto con Rhino? Si hago un GenerateMock<DataCollectionWorkflow> (o un trozo), el constructor se ejecuta y el campo privado del simulacro & Quot; _params & Quot; se inicializa, pero el simulacro " Parameters " la propiedad es simplemente nula.

Obviamente, la subclase simulada generada está anulando la implementación de la propiedad. ¿Hay alguna forma de excluir la propiedad Parámetros de volver a implementarse?

Gracias.

¿Fue útil?

Solución

Bien, lo descubrí. Trátame como otra víctima de las complejidades de Rhino. Este tipo de cosas me dan ganas de pasar a un marco más simple, tal vez verifique MoQ.

Entonces, la respuesta es usar PartialMocks. Había jugado brevemente con la generación de una simulación parcial, pero cuando pasé el depurador por encima noté que las propiedades ni siquiera eran nulas, estaban arrojando excepciones raras, por lo que no miré mucho más profundo. Estaba usando la sintaxis de tipo abreviado AAA.

Resulta que si simplemente pongo el simulacro en modo de reproducción, la prueba funciona: las propiedades se usan tal cual (como deberían ser con un simulacro parcial).

Entonces, aquí está la respuesta:

[Test]
public void ShouldCreateParameterListInConstructor()
{
      var mockRepository = new MockRepository();
      var mock = mockRepository.PartialMock<DataCollectionWorkflow>();
      using ( mockRepository.Record() )
      {

      }
      using (mockRepository.Playback())
      {
           Assert.That(mock.Parameters, Is.Not.Null, "DataCollectionWorkflow base class didn't create new param collection");
      }
}

Me doy cuenta de que esta es una prueba con estado, pero en realidad es un preludio más simple para algunas pruebas de comportamiento que involucran la propiedad en cuestión, por lo que quería este caso como requisito previo. Espero que ayude a alguien.

Otros consejos

Intente hacer _params virtuales

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