MOQ: ¿cómo crear manualmente una propiedad de respaldo usando SetupGet / SetupSet?

Sé que podemos llamar aSetupAllProperties() para crear automáticamente propiedades de respaldo. Pero esto es demasiado restrictivo, porque no me permite ejecutar código adicional en el captador / configurador. Por ejemplo, me gustaría crear un setter moq'd que invoque algún otro método / evento / lógica.

El siguiente ejemplo de código 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
    }
}

Dado que el getter está configurado para devolver el valor de la variable local (que supongo que ahora es una variable capturada), esperaría vermockA.Object.B == 2. Pero en cambio, es1.

¿Me estoy perdiendo algo fundamentalmente aquí? ¿O es esto un error MOQ? Estoy ejecutando MOQ 4.0.10501.6

Respuestas a la pregunta(1)

Su respuesta a la pregunta