C# Set方法不通过Moq设置抽象对象的属性
我有一个C# Set方法不通过Moq设置抽象对象的属性,c#,moq,C#,Moq,我有一个SetRange方法,它设置StartDate和EndDate属性: public virtual void SetRange(DateTime? startDate, DateTime? endDate) { this.StartDate = startDate; this.EndDate = endDate; } var dateRangeEntityStub = new Mock<DateRangeEntityBase>(); dateRangeEnt
SetRange
方法,它设置StartDate
和EndDate
属性:
public virtual void SetRange(DateTime? startDate, DateTime? endDate)
{
this.StartDate = startDate;
this.EndDate = 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));
在对我的存根对象进行测试时,下面将设置StartDate
和EndDate
属性:
public virtual void SetRange(DateTime? startDate, DateTime? endDate)
{
this.StartDate = startDate;
this.EndDate = 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));
为什么
SetRange
方法不在存根上设置属性?Moq覆盖每个虚拟方法/属性,并将使用它自己的实现
因此,如果您想保持SetRange
方法的原始行为,您需要在mock上将CallBase
设置为true
,这会告诉Moq也调用原始代码:
var dateRangeEntityStub = new Mock<DateRangeEntityBase>() { CallBase = true };
var dateRangeEntityStub=new Mock(){CallBase=true};
另请参见快速入门:部分 哦,是的。有道理。谢谢