5 c# unit-testing moq task-parallel-library
我正在使用XUnit并Moq测试我的逻辑层的代码。我的逻辑层还与数据层通信,因此我想模拟接口以保持测试简单。
Task<string>我想知道当我调用异步任务方法时应该如何返回 a 。我的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);
}
Run Code Online (Sandbox Code Playgroud)
使用Task.FromResult(expected)
mock.Setup(arg => arg.GetScoreByTotalWeighting(value)).Returns(Task.FromResult(expected))
Run Code Online (Sandbox Code Playgroud)
value另外,当您在返回结果时不关心该参数时,我建议避免作为参数。你可以It.IsAny<int>()这样使用:
mock.Setup(arg => arg.GetScoreByTotalWeighting(It.IsAny<int>())).Returns(Task.FromResult(expected))
Run Code Online (Sandbox Code Playgroud)
问题是您设置然后mock.Setup(arg => arg.GetScoreByTotalWeighting(value))用调用。在两个地方使用以避免该问题,或传递相同的值:value == 0survey.GetResult(score)50It.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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6580 次 |
| 最近记录: |