Set方法不通过Moq设置抽象对象的属性

时间:2014-07-27 13:00:08

标签: c# moq

我有一个SetRange方法,用于设置StartDateEndDate属性:

public virtual void SetRange(DateTime? startDate, DateTime? endDate)
{
    this.StartDate = startDate;
    this.EndDate = endDate;
}

在我的存根对象测试中,下面将设置StartDateEndDate属性:

var dateRangeEntityStub = new Mock<DateRangeEntityBase>();
dateRangeEntityStub.SetupAllProperties();
// atempt 1
dateRangeEntityStub.Object.SetRange(DateTime.Now.AddYears(-1), DateTime.Now);
// atempt 2
dateRangeEntityStub.Setup(x => x.SetRange(DateTime.Now.AddYears(-1), DateTime.Now));

但正常的二传手可以使用:

dateRangeEntityStub.Object.EndDate = DateTime.Now;

为什么SetRange方法没有在存根上设置属性?

1 个答案:

答案 0 :(得分:1)

Moq会覆盖每个虚拟方法/属性,并将使用自己的实现。

因此,如果您想保留SetRange方法的原始行为,则需要在模拟上将CallBase设置为true,告诉Moq也调用原始代码:

var dateRangeEntityStub = new Mock<DateRangeEntityBase>() { CallBase = true };

另见快速入门:Customizing Mock Behavior部分。