2012-07-18 15 views
17

(Como lo indican las etiquetas, estoy usando moq).Cómo simular una propiedad de solo lectura cuyo valor depende de otra propiedad del Mock

que tienen una interfaz de esta manera:

interface ISource 
{ 
    string Name { get; set; } 
    int Id { get; set; } 
} 

interface IExample 
{ 
    string Name { get; } 
    ISource Source { get; set; } 
} 

En mi solicitud, los casos concretos de IExample aceptar un DTO (IDataTransferObject) como fuente. Algunas propiedades en la implementación concreta de IExample simplemente se delegan en la Fuente. Así ...

class Example : IExample 
{ 
    IDataTransferObject Source { get; set; } 

    string Name { get { return _data.Name; } } 
} 

Me gustaría crear una maqueta independiente de IExample (significado autónomo que no puedo usar una variable capturado debido a que varias instancias de la maqueta IExample serán creados en el curso de una prueba) y configure el simulacro de modo que IExample.Name devuelva el valor de IExample.Source.Name. Por lo tanto, me gustaría crear un simulacro de algo como esto:

var example = new Mock<IExample>(); 
example.SetupProperty(ex => ex.Source); 
example.SetupGet(ex => ex.Name).Returns(what can I put here to return ex.Source.Name); 

Esencialmente, quiero configurar el simulacro de volver, ya que el valor de una propiedad, el valor de una propiedad de un subobjeto de la maqueta.

Gracias.

Respuesta

28

Probablemente se podría utilizar:

example.SetupGet(ex => ex.Name).Returns(() => example.Object.Source.Name); 

El valor a ser devuelto luego será determinada cuando se accede a la propiedad, y será tomada de Name propiedad de la propiedad de la maqueta Source.

+0

Eso hace exactamente lo que quiero. Nunca se me ocurrió capturar la variable local que es el simulacro al que quiero hacer referencia para obtener el valor subyacente. Hace que mi cerebro duela. – wageoghe

Cuestiones relacionadas