Я знаю, что мы можем позвонить SetupAllProperties()
, чтобы автоматически создать вспомогательные свойства.Но это слишком ограничительно, потому что не позволяет мне выполнять дополнительный код в getter / setters.Например, я хотел бы создать установщик moq'd, который вызывает некоторый другой метод / событие / логику.
В следующем примере кода воспроизводится проблема
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
}
}
, поскольку получатель являетсяустановка для возврата значения локальной переменной (которая, я думаю, теперь является захваченной переменной), я ожидаю увидеть mockA.Object.B == 2
.Но вместо этого, это 1
.
Я что-то здесь упускаю?Или это ошибка MOQ?Я использую MOQ 4.0.10501.6