gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:52:14 24 4
gpt4 key购买 nike

我正在使用下面的代码。我对其他工作正常的方法使用相同的方法。这里被mock的IExportJobAdapter的适配器方法应该返回boolean类型值的Task。

我希望从代码中获得真实值,但我从模拟方法中得到的是错误值。在 Controller 内部,我调用了 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 });

最佳答案

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

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

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

在您的示例中,我假设方法 CreateExportJob 采用 ExportJobRequest 参数。因此,当调用上述模拟时,它将忽略作为参数传递给 CreateExportJob 的内容并返回 true

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

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

引用 Moq Quickstart有关如何使用模拟库的更多信息。

关于C# Moq 方法不返回指定的 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59061994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com