Sé que podemos llamar al SetupAllProperties()
para crear automáticamente propiedades de respaldo. Pero esto es demasiado restrictivo, porque no me permite ejecutar código adicional en getter/setters. Por ejemplo, me gustaría crear un setter moq'd que invoque algún otro método/evento/lógica.MOQ: ¿cómo crear manualmente una propiedad de respaldo usando SetupGet/SetupSet?
El ejemplo de código siguiente reproduce el problema
public interface IA
{
int B { get; set; }
};
class Test
{
[Test]
public void BackingPropertyTest()
{
int b = 1;
var mockA = new Mock<IA>();
//mockA.SetupAllProperties();
mockA.SetupGet(m => m.B).Returns(b);
mockA.SetupSet(m => m.B).Callback(val => b = val);
mockA.Object.B = 2;
Assert.AreEqual(2, b); // pass. b==2
Assert.AreEqual(2, mockA.Object.B); // fail. mockA.Object.B==1, instead of 2
}
}
Puesto que el captador está configurado para devolver el valor de la variable local (que supongo que es ahora una variable capturado), esperaría ver mockA.Object.B == 2
. Pero en cambio, es 1
.
¿Me falta algo fundamentalmente aquí? ¿O es esto un error de MOQ? Estoy ejecutando MOQ 4.0.10501.6