C# Moq 方法不返回指定的布尔值

C# Moq method is not returning the boolean value specified

我正在使用以下代码。我对其他工作正常的方法使用相同的方法。这里被mock的IExportJobAdapter的适配器方法应该是return布尔类型值的任务。

我希望从代码中获得真实值,但我从模拟方法中得到的是错误值。在控制器内部,我调用了 IExportJobAadapter 的模拟方法,它是 returning false。我从堆栈溢出中尝试了很多事情,但无法解决。我想重复一遍,这只发生在 returning 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 });

如果您的 mock 中的 Setup 方法没有与您正在测试的代码相同的参数,那么 mock 将不会匹配调用,您将获得预期响应的默认值,在本例中为默认值布尔值是 false - 这就是您所看到的。

如果您希望模拟 return 指定的值,那么您需要告诉安装程序接受参数的任何值:

mocker.GetMock<IExportJobAdapter>()
    .Setup(x => x.CreateExportJob(It.IsAny<ExportJobRequest>()))
    .Returns(Task.FromResult(true));

在您的示例中,我假设方法 CreateExportJob 采用参数 ExportJobRequest。所以当上面的 mock 被调用时,它会忽略作为参数传递给 CreateExportJob 和 return true.

的内容

除此之外,您可以使用 mock 的 .ReturnsAsync 方法来消除调用 Task.FromResult:

的需要
mocker.GetMock<IExportJobAdapter>()
    .Setup(x => x.CreateExportJob(It.IsAny<ExportJobRequest>()))
    .ReturnsAsync(true);

参考 Moq Quickstart 了解更多关于如何使用 mocking 库的信息。