我已经通读了Moq用户组的一些讨论,并且未能找到示例,并且迄今为止 无法找到我拥有的场景。这里是我的问题,代码:用Moq嘲笑收藏行为
// 6 periods
var schedule = new List<PaymentPlanPeriod>()
{
new PaymentPlanPeriod(1000m, args.MinDate.ToString()),
new PaymentPlanPeriod(1000m, args.MinDate.Value.AddMonths(1).ToString()),
new PaymentPlanPeriod(1000m, args.MinDate.Value.AddMonths(2).ToString()),
new PaymentPlanPeriod(1000m, args.MinDate.Value.AddMonths(3).ToString()),
new PaymentPlanPeriod(1000m, args.MinDate.Value.AddMonths(4).ToString()),
new PaymentPlanPeriod(1000m, args.MinDate.Value.AddMonths(5).ToString())
};
// Now the proxy is correct with the schedule
helper.Setup(h => h.GetPlanPeriods(It.IsAny<String>(), schedule));
然后在我的测试中,我使用期,但嘲笑_PaymentPlanHelper从未填充集合,请参阅下面的用法:
public IEnumerable<PaymentPlanPeriod> Periods
{
get
{
if (CanCalculateExpression())
_PaymentPlanHelper.GetPlanPeriods(this.ToString(), _PaymentSchedule);
return _PaymentSchedule;
}
}
现在,如果我的嘲笑对象更改为使用GetPlanPeriods的另一种重载方法,它返回一个List,如下所示:
var schedule = new List<PaymentPlanPeriod>()
{
new PaymentPlanPeriod(1000m, args.MinDate.ToString()),
new PaymentPlanPeriod(1000m, args.MinDate.Value.AddMonths(1).ToString()),
new PaymentPlanPeriod(1000m, args.MinDate.Value.AddMonths(2).ToString()),
new PaymentPlanPeriod(1000m, args.MinDate.Value.AddMonths(3).ToString()),
new PaymentPlanPeriod(1000m, args.MinDate.Value.AddMonths(4).ToString()),
new PaymentPlanPeriod(1000m, args.MinDate.Value.AddMonths(5).ToString())
};
helper.Setup(h => h.GetPlanPeriods(It.IsAny<String>())).Returns(new List<PaymentPlanPeriod>(schedule));
List<PaymentPlanPeriod> result = new _PaymentPlanHelper.GetPlanPeriods(this.ToString());
这个按预期工作。任何指针将是真棒,只要你不想揍我的建筑... :)
谢谢 斯蒂芬
我是否正确,您希望您的模拟方法调用来修改传递给它的计划参数?这个SO问题可能会有所帮助 - 答案使用回调http://stackoverflow.com/questions/2183691/how-to-modify-an-invocation-parameter-of-a-mocked-method-with-moq – 2010-06-15 23:18:25
是的大卫。我正在阅读其他帖子。谢谢。 – 2010-06-15 23:57:41