我有以下课程:
public class PairOfDice
{
private Dice d1,d2;
public int Value
{
get { return d1.Value + d2.Value; }
}
}
现在我想在我的测试中使用PairOfDice
返回值1,尽管我在我的真实骰子中使用随机值:
[Test]
public void DoOneStep ()
{
var mock = new Mock<PairOfDice>();
mock.Setup(x => x.Value).Return(2);
PairOfDice d = mock.Object;
Assert.AreEqual(1, d.Value);
}
不幸的是我收到Invalid setup on non-overridable member
错误。在这种情况下我该怎么办?
请注意,这是我第一次尝试实施单元测试。
答案 0 :(得分:47)
您可以在模拟对象上使用.SetupGet
。
例如
[Test]
public void DoOneStep ()
{
var mock = new Mock<PairOfDice>();
mock.SetupGet(x => x.Value).Returns(1);
PairOfDice d = mock.Object;
Assert.AreEqual(1, d.Value);
}
有关详细信息,请参阅here。
答案 1 :(得分:13)
您的问题是因为它不是virtual
。不是因为你没有二传手。
Moq无法构建代理,因为它无法覆盖您的属性。您需要使用接口,虚拟方法或抽象方法。