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