Moq调用真实实例
本文关键字:实例 真实 调用 Moq | 更新日期: 2023-09-27 18:15:29
我有以下需要测试的类:
public ReportViewModel
{
public ReportViewModel()
{
using (var repository = new ExecutionDetailsReportRepository())
{
this._reportData= repository.GetExecutionDetailsReport(testManager.ExecutionDetail.ExecutionId);
}
}
}
构造函数创建一个新的ExecutionDetailsReportRepository,这需要模拟
我的Test方法有如下模拟设置
var mockExecutionDetailsReportRepository = new Mock<IExecutionDetailsReportRepository>(MockBehavior.Loose);
mockExecutionDetailsReportRepository.Setup(ed => ed.GetExecutionDetailsReport(null)).Returns((List<ExecutionDetailsReport> x) => x).Verifiable();
GetExecutionDetailsReport接受一个int?作为参数类型。我试过用0或it设置它。尽管如此,我的测试最终还是创建了GetExecutionDetailsReport的一个新的真实实例,而不是使用mock实例。
请帮助我了解我的模拟设置有什么问题?我使用Moq 4.0
正如Doc所说,您将需要注入Repository实例。依赖注入本质上是mock的先决条件。阅读ninject或Unity (Unity是依赖注入器,而不是游戏引擎)。
最常见的模式是"构造函数注入",它会让你的构造函数看起来像
public ReportViewModel(IExecutionDetailsReportRepository xdrp)
您将使用xdrp而不是New'd up实例。在你通过模拟的测试中,在你的实际代码中,你将依靠Unity, Ninject等来获得一个实例。就像我说的,仔细阅读
http://www.ninject.org/http://unity.codeplex.com/