2009-02-23 6 views
21

¿Es posible acceder al parámetro utilizado para hacer una llamada a una expectativa burlada al ensamblar el objeto Returns?Accediendo a los argumentos originales de Expect() al ensamblar el valor en Returns()

Aquí es un esbozo de los objetos involucrados y, dado que, estoy tratando de burlarse de una colección:

Class CollectionValue { 
    public Id { get; set; } 
} 
Class Collection { 
    private List<CollectionValue> AllValues { get; set; } 
    public List<CollectionValue> GetById(List<int> ids) { 
     return AllValues.Where(v => ids.Contains(v.Id)); 
    } 
} 

Dada una lista de pruebas de CollectionValues ​​que será utilizado para el objeto burlado, cómo uno establecer una expectativa que maneje cada posible permutación de los ID en esa lista de CollectionValues, incluidas las llamadas que combinan ID existentes y ID no existentes? Mi problema proviene del deseo de establecer todas las expectativas posibles en una sola llamada; si el acceso al parámetro original no es posible, podría simplemente configurar exactamente la expectativa exacta que quiero probar en una llamada dada cada vez.

Esto es lo que esperaba hacer, ¿dónde "???" representa el lugar donde sería útil tener acceso al parámetro que se utiliza para llamar GetById (el que calificó la restricción It.IsAny):

CollectionMock.Expect(c => c.GetById(It.IsAny<List<int>>())).Returns(???); 

Respuesta

61

De la guía moq quickstart:

// access invocation arguments when returning a value 
mock.Setup(x => x.Execute(It.IsAny<string>())) 
       .Returns((string s) => s.ToLower()); 

Lo que sugiere por lo tanto, ¿puedes llenar tu? como

CollectionMock.Expect(c => c.GetById(It.IsAny<List<int>>())) 
       .Returns((List<int> l) => //Do some stuff with l 
        ); 
Cuestiones relacionadas