考虑以下代码段;
public enum ReportType {Monthly,Quarterly}
public class BaseReport
{
public ReportType ReportType {get;set;}
}
public class MonthlyReport : BaseReport
{
public String month = "January"
public MonthlyReport() { ReportType = Monthly;}
}
public class Foo
{
public virtual void AddReport(BaseReport report);
}
[Test]
public void Test1()
{
var mock = new Mock<Foo>(){CallBase =true};
var report = new MonthlyReport();
mock.Object.AddReport(report);
}
我正在尝试验证是否使用某个参数调用AddReport();
mock.Verify(x => x.AddReport(It.Is<MonthlyReport>(p => p.month == "January" &&
p.ReportType == ReportType.Monthly)));
正如我所担心的,它不适用于Is&lt;&gt;的MonthlyReport参数。即使它是从BaseReport派生的。如果我使用Is,那么我不能在表达式中使用p.month,而且我不熟悉c#以了解我是否可以在lambda表达式中使用if(p是MonthlyReport),或者更重要的是,它可以用作意图。
我该如何处理这个问题?请注意,模拟是部分的,虽然我可以忍受 设置方法与回调如果它巧妙地解决了我的问题。 任何指针都会非常感激......