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 库的信息。
我正在使用以下代码。我对其他工作正常的方法使用相同的方法。这里被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 库的信息。