我有一个SetRange
方法,用于设置StartDate
和EndDate
属性:
public virtual void SetRange(DateTime? startDate, DateTime? endDate)
{
this.StartDate = startDate;
this.EndDate = endDate;
}
在我的存根对象测试中,下面将设置StartDate
和EndDate
属性:
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
方法没有在存根上设置属性?
答案 0 :(得分:1)
Moq会覆盖每个虚拟方法/属性,并将使用自己的实现。
因此,如果您想保留SetRange
方法的原始行为,则需要在模拟上将CallBase
设置为true
,告诉Moq也调用原始代码:
var dateRangeEntityStub = new Mock<DateRangeEntityBase>() { CallBase = true };
另见快速入门:Customizing Mock Behavior部分。