2011-02-03 18 views
5

Estoy tratando de averiguar cómo funciona todo esto Mock (usando el framework Moq), pero me confundí un poco con los métodos que vuelven vacíos.Moq a void method

El objeto original tiene los siguientes métodos/propiedades:

void Add(Person entity); 
void Save(); 
IQueryable<Person> Persons; 

El método Add llama InsertOnSubmit (es LINQ to SQL), y el método Save llama Context.SubmitChanges(). La propiedad de la persona devuelve el objeto Table<News>.

No estoy seguro de cómo hago para burlarme de estos métodos, ya que obviamente no puedo usar Returns().

¿O mi diseño significa que no puedo realmente simular los objetos correctamente?

+0

Sin contexto adicional, es un poco difícil dar una buena respuesta. – mfloryan

Respuesta

3

Depende de lo que piense probar.

Moq puede ayudarlo significativamente cuando desee probar las interacciones entre la clase que se está probando y otras clases.

En el caso que está describiendo, presumiblemente está probando una clase que está utilizando la clase con métodos y propiedades mencionados anteriormente. Para verificar las interacciones que desea verificar si se llama al método Add con los parámetros esperados, se llama al método Save y se hace referencia a la propiedad Persons para leer los resultados. Esto se puede lograr de la siguiente manera:

var mockedClass = new Mock<IDaoClass>(); 
var classUnderTest = ... 

mockedClass.SetupGet(m => m.Persons).Returns(new List<Person>().AsQueryable()); 

classUnderTest.DoSomething(); 

mockedClass.Verify(m => m.Add(It.IsAny<Person>())); 
mockedClass.Verify(m => m.Save()); 

Si desea probar algo más y proporcionar un talón de aplicación de estos métodos a continuación, es posible que desee simplemente crear una aplicación de prueba o considerar el uso de configuraciones de Moq con funciones expresado como lambdas en lugar de configuraciones simples.