【发布时间】:2013-06-05 19:00:03
【问题描述】:
我的测试方法中有一个方法base.ResolveDate(),它来自基类及其公共和虚拟。我想用我自己的方法来存根/填充这个方法,那么我应该存根还是填充? Stub 或 Shim,我该怎么做呢?根据我对 MS Fakes 的经验,它似乎是一个存根,因为 存根只能影响可覆盖的方法。 - ALM 2012
这里是测试方法:
public override DateTime ResolveDate(ISeries comparisonSeries, DateTime targetDate)
{
if (comparisonSeries == null)
{
throw new ArgumentNullException("comparisonSeries");
}
switch (comparisonSeries.Key)
{
case SeriesKey.SomeKey1:
case SeriesKey.SomeKey2:
case SeriesKey.SomeKey3:
case SeriesKey.SomeKey4:
case SeriesKey.SomeKey5:
return DateHelper.PreviousOrCurrentQuarterEnd(targetDate);
}
return base.ResolveDate(comparisonSeries, targetDate);
}
这是我想要 Stub/Shim 的基类中的方法吗?
public virtual DateTime ResolveDate(ISeries comparisonSeries, DateTime targetDate)
{
if (this.key == comparisonSeries.Key)
return targetDate;
return DateHelper.FindNearestDate(targetDate, comparisonSeries.AsOfDates);
}
【问题讨论】:
-
请清楚你想做什么。我想你有一个包含方法 ResolveDate 的基类(第二段代码)。您是否有派生自此基类并包含覆盖 ResolveDate(第一段代码)的方法的第二个类?然后你想测试到底是什么?
-
嗯,如果第一段代码是你的测试,为什么不去掉对基方法的调用呢?或者用别的东西代替。我看不出使用存根或垫片的意义。题外话:第二部分包含实现,所以包含的类不是抽象的。
-
嗨。很抱歉之前的回复。是的,我有一个包含方法 ResolveDate(第二段代码)的基类。您是否有从该基类派生的第二个类,并包含一个覆盖 ResolveDate(第一段代码)的方法。我想为 'public override DateTime ResolveDate' 编写一个单元测试,但不知道是否应该 Stub 或 Shim out 'base.ResolveDate(comparisonSeries, targetDate);'?
标签: c# unit-testing microsoft-fakes stubs