无法获得Mocked方法以返回null

时间:2018-09-21 13:59:36

标签: c# unit-testing moq

我正在模拟使用Moq的方法,并且我希望该方法返回 null ,但它不返回 null ,我不确定为什么。

这是我的设置代码:

var mock2 = new Mock<ReminderRepository>(stubPatientRemindersDBModelContainer);
mock2.CallBase = true;
mock2.Setup(x => x.GetPatientEscalations(userName, patientId, startDateTime, endDateTime, new DataTable()))
    .Returns((PatientEscalationsDto)null);

调试时,我希望分配给GetPatientEscalations的变量为 null ,但不是。

我在做什么错了?

1 个答案:

答案 0 :(得分:3)

检查传递给模拟设置的参数。

 mock2
    .Setup(x => x.GetPatientEscalations(userName, patientId, startDateTime, endDateTime, new DataTable()))
    .Returns((PatientEscalationsDto)null);

如果它们与调用成员时实际传递的内容不匹配,则将在您启用CallBase后恢复为基本调用。

尝试使用It.IsAny<T>()参数匹配器来放宽对模拟成员的期望

 mock2
    .Setup(x => x.GetPatientEscalations(
        It.IsAny<string>(), 
        It.IsAny<int>(), //this is an assumption. use desired type here
        It.IsAny<DateTime>(), 
        It.IsAny<DateTime>(), 
        It.IsAny<DataTable>()))
    .Returns((PatientEscalationsDto)null);

这样,传递的所有参数都将匹配并调用模拟成员以按预期方式运行。