gpt4 book ai didi

c# - 如何使用 Moq 返回 Task

转载 作者:行者123 更新时间:2023-12-04 02:34:27 25 4
gpt4 key购买 nike

我正在使用 XUnitMoq从我的逻辑层测试代码。我的逻辑层也与数据层通信,所以我想模拟接口(interface)以保持测试简单。

我想知道我应该如何返回 Task<string>当我调用异步任务方法时。我的GetOrder方法调用 GetOrderById但是数据层方法返回null。

编辑:我根据所有反馈更改了我的单元测试。现在工作正常。
我的测试:

public async void GetOrder()
{
//Arrange
string expected = "test";

var mock = new Mock<IRepository>();
mock.Setup(arg => arg.GetOrderNameById(It.IsAny<int>())
.Returns(Task.FromResult(expected));
var survey = new SurveyResult(mock.Object);

//Act
string result = await survey.GetOrderNameById(It.IsAny<int>()));

//Assert
Assert.Equal(expected, result);
}

最佳答案

使用 Task.FromResult(expected)

mock.Setup(arg => arg.GetScoreByTotalWeighting(value)).Returns(Task.FromResult(expected))

我也建议避免 value作为参数,当您在返回结果时不关心该参数时。您可以使用 It.IsAny<int>() ,像那样:

mock.Setup(arg => arg.GetScoreByTotalWeighting(It.IsAny<int>())).Returns(Task.FromResult(expected))

您设置的问题 mock.Setup(arg => arg.GetScoreByTotalWeighting(value))value == 0然后调用survey.GetResult(score)50 .使用 It.IsAny<int>()在两个地方避免该问题,或传递相同的值:

mock.Setup(arg => arg.GetScoreByTotalWeighting(score))

解决方法:

public async Task GetResult()
{
//Arrange
string expected = "test";

var mock = new Mock<IRetreiveQuestionRepository>();
mock.Setup(arg => arg.GetScoreByTotalWeighting(It.IsAny<int>()))
.ReturnsAsync(expected);
var survey = new SurveyResult(mock.Object);

//Act
string result = await survey.GetResult(It.IsAny<int>());

//Assert
Assert.Equal(expected, result);
}

关于c# - 如何使用 Moq 返回 Task<string>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62499713/

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