Hello,
I've read through some of the discussions on the Moq user group and have failed to find an example and have been so far unable to find the scenario that I have. Here is my question and code:
// 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));
Then in my tests I use Periods but the Mocked _PaymentPlanHelper never populates the collection, see below for usage:
public IEnumerable<PaymentPlanPeriod> Periods
{
get
{
if (CanCalculateExpression())
_PaymentPlanHelper.GetPlanPeriods(this.ToString(), _PaymentSchedule);
return _PaymentSchedule;
}
}
Now if I change the mocked object to use another overloaded method of GetPlanPeriods that returns a List like so :
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());
This works as expected. Any pointers would be awesome, as long as you don't bash my architecture... :)
Thank you, Stephen