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

Moq调用真实实例

正如Doc所说,您将需要注入Repository实例。依赖注入本质上是mock的先决条件。阅读ninject或Unity (Unity是依赖注入器,而不是游戏引擎)。

最常见的模式是"构造函数注入",它会让你的构造函数看起来像

public ReportViewModel(IExecutionDetailsReportRepository xdrp)

您将使用xdrp而不是New'd up实例。在你通过模拟的测试中,在你的实际代码中,你将依靠Unity, Ninject等来获得一个实例。就像我说的,仔细阅读

http://www.ninject.org/

http://unity.codeplex.com/