【发布时间】:2019-11-27 02:03:56
【问题描述】:
我正在使用以下代码。我对其他工作正常的方法使用相同的方法。这里IExportJobAdapter被mock的适配器方法应该返回布尔类型值的Task。
我希望从代码中获得真正的价值,但我的模拟方法却是错误的。在控制器内部,我调用了 IExportJobAadapter 的模拟方法,它返回 false。我从堆栈溢出尝试了很多事情,但无法解决。我想重复一遍,这只发生在返回 bool 方法的情况下。我在所有其他地方都使用相同的方法并且工作正常。
var controller = mocker.CreateInstance<ExportJobController>();
模拟适配器方法
mocker.GetMock<IExportJobAdapter>()
.Setup(x => x.CreateExportJob(null))
.Returns(Task.FromResult(true));
// Act
var result = await controller.CreateExportJob(new ExportJobRequest { ProfileId = profileId, Request = request,DttmCreated= dttmCreated });
【问题讨论】:
-
需要查看被测代码。
-
执行测试时传递给模拟的参数很可能不匹配。
-
发布缺少minimal reproducible example... 但正如@Nkosi 所说,这很可能是由于
x.CreateExportJob(null)(设置方法以在使用null调用时返回特定值)而不是通常的x.CreateExportJob(It.IsAny<ExportJobRequest>())跨度> -
非常感谢 Nkosi 和 Alexei。我试过 x.CreateExportJob(It.IsAny
()) 并且它工作得很好。 -
@sks 我在下面提供的答案中添加了一个链接。快速入门文档。您应该花点时间阅读一下,以更好地了解 Moq 的工作原理。
标签: c# unit-testing moq