【发布时间】:2010-06-15 23:05:56
【问题描述】:
我已经阅读了关于 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));
然后在我的测试中我使用 Periods 但 Mocked _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 问题可能会有所帮助 - 答案使用回调 stackoverflow.com/questions/2183691/…
-
是的,大卫。我现在正在阅读另一篇文章。谢谢。
标签: c# unit-testing moq