MOQ - como criar manualmente uma propriedade de backup usando SetupGet / SetupSet?

Sei que podemos ligarSetupAllProperties() para criar automaticamente propriedades de apoio. Mas isso é muito restritivo, porque não me permite executar código adicional no getter / setters. Por exemplo, eu gostaria de criar um setter moq'd que invoque algum outro método / evento / lógica.

O exemplo de código a seguir reproduz o 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
    }
}

Desde que o getter está configurado para retornar o valor da variável local (que eu acho que agora é uma variável capturada), eu esperaria vermockA.Object.B == 2. Mas, em vez disso, é1.

Estou fundamentalmente faltando alguma coisa aqui? Ou isso é um bug do MOQ? Estou executando o MOQ 4.0.10501.6

questionAnswers(1)

yourAnswerToTheQuestion