C# 如何返回任务<;字符串>;使用最小起订量?

C# 如何返回任务<;字符串>;使用最小起订量?,c#,unit-testing,task-parallel-library,moq,C#,Unit Testing,Task Parallel Library,Moq,我正在使用XUnit和Moq测试逻辑层中的代码。我的逻辑层还与数据层通信,因此我想模拟接口以保持测试的简单性 我想知道在调用异步任务方法时如何返回任务。我的GetOrder方法调用GetOrderById,但数据层方法返回null。 编辑:我根据所有反馈更改了单元测试。现在可以用了。 我的测试: public async void GetOrder() { //Arrange string expected = "test"; var mo

我正在使用
XUnit
Moq
测试逻辑层中的代码。我的逻辑层还与数据层通信,因此我想模拟接口以保持测试的简单性

我想知道在调用异步任务方法时如何返回
任务。我的
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);
}
public异步void GetOrder()
{
//安排
字符串应为=“测试”;
var mock=new mock();
mock.Setup(arg=>arg.GetOrderNameById(It.IsAny())
.返回(任务.FromResult(预期));
var调查=新的调查结果(模拟对象);
//表演
string result=await survey.GetOrderNameById(It.IsAny());
//断言
断言。相等(预期,结果);
}
使用
Task.FromResult(预期)

此外,我建议避免将
作为参数,因为在返回结果时您不关心该参数。您可以使用
It.IsAny()
,如下所示:

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

您应该能够使用当前使用的.ReturnsAsync方法,在不知道实现的情况下,很难判断主题返回null的原因。但是我会仔细检查存根,看看您是否指定了真正传递给实际实现的值,或者是否缺少其他方法的存根。
希望对您有所帮助:)

FYI如果您有
Assert.Equal(预期结果),就足够了紧跟
字符串结果=等待调查。获取结果(分数)单元测试不必返回bool您的测试没有显示
异步无效
usageI添加了我的实际实现来澄清我的问题。我以前不知道
It.IsAny()
是一件事,这非常有用,正是我所需要的。
mock.Setup(arg => arg.GetScoreByTotalWeighting(It.IsAny<int>())).Returns(Task.FromResult(expected))
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);
}