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);
}