2011-01-26 13 views
9

Quiero MOq siguiente objeto:propiedad Moq con colocador protegida

abstract class Foo 
{ 
    public string Bar { get; protected set; } 
} 

modo que new Mock<Foo>().Bar retorno "Blah".

¿Cómo puedo hacer eso?


fooMock.SetupGet<string>(s => s.Bar).Returns("Blah"); 

tiros

Fallo: System.NotSupportedException: Configuración no válida en un miembro no virtual: s => s.Date

y

fooMock.Protected().SetupGet<string>("Bar").Returns("Blah"); 

arroja

Para especificar una configuración para la propiedad pública StatementSection.Date, utilizar las sobrecargas mecanografiadas

Respuesta

7

Desde escarneciendo, se lleva a cabo mediante la creación de un proxy de la clase, única función virtual/propiedad puede ser "moqued"

+0

Entonces, ¿cómo actuar? Llamar a la propiedad setter utilizando la reflexión? ¿Modificar propiedad para hacer virtual? – abatishchev

+0

Creo que la única aplicación es la segunda. –

7

Como Felice (+1) dijo que la burla crea un proxy, lo que significa que necesita hacer las cosas virtuales (para que Moq pueda utilizar su magia de proxy y anular la propiedad).

Como alternativa, si lo que desea es a chorro en un valor que puede código auxiliar manualmente la clase que desea probar y exponer un medio para llegar a la incubadora: -

public class FooStub : Foo { 
    public SetBar(string newValue) { 
     Bar = newValue; 
    } 
}