【发布时间】:2011-04-07 08:39:53
【问题描述】:
我知道我们可以调用SetupAllProperties() 来自动创建支持属性。但这太严格了,因为它不允许我在 getter/setter 中执行额外的代码。例如,我想创建一个最小起订量的 setter 来调用其他一些方法/事件/逻辑。
以下代码示例重现了该问题
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
}
}
由于 getter 设置为返回局部变量的值(我猜现在是捕获的变量),我希望看到 mockA.Object.B == 2。但取而代之的是1。
我从根本上错过了什么吗?或者这是一个最小起订量错误?我正在运行 MOQ 4.0.10501.6
【问题讨论】:
标签: c# unit-testing moq