当前位置: 首页 > 知识库问答 >
问题:

我如何告诉Moq返回一个任务?

子车修平
2023-03-14
Task DoSomethingAsync();
[TestMethod()]
public async Task MyAsyncTest()
{
   Mock<ISomeInterface> mock = new Mock<ISomeInterface>();
   mock.Setup(arg => arg.DoSomethingAsync()).Callback(() => { <my code here> });
   ...
}

然后,在我的测试中,我执行调用AwaitDoSomethingAsync()的代码。而测试就是在那条线上失败了。我做错了什么?

共有1个答案

尉迟兴修
2023-03-14

您的方法没有任何回调,因此没有理由使用.callback()。您可以简单地使用.returns()和Task.FromResult返回具有所需值的任务,例如:

MyType someValue=...;
mock.Setup(arg=>arg.DoSomethingAsync())        
    .Returns(Task.FromResult(someValue));

更新2014-06-22

Moq 4.2有两种新的扩展方法来帮助实现这一点。

mock.Setup(arg=>arg.DoSomethingAsync())
    .ReturnsAsync(someValue);

mock.Setup(arg=>arg.DoSomethingAsync())        
    .ThrowsAsync(new InvalidOperationException());
.Returns(Task.FromResult(default(object)))
mock.Setup(arg=>arg.DoSomethingAsync())        
    .Returns(Task.CompletedTask);
 类似资料:
  • 我正在尝试对一个方法进行单元测试,根据在其中创建的对象的值,该方法有不同的分支。下面的代码演示了它。 下面是TestClass: 但是,它总是失败,因为c_objectMock始终为空。我该怎么做才能告诉Mockito不要返回空对象?

  • 我有一些这样的代码: 但是IDE...Imgur图像 所以我尝试这样: 但它不起作用。

  • 我的项目使用Android Volley网络框架已经很久了,但是最近我发现了一个发布在互联网上的SSL 3.0协议bug。 我想知道如何找出我的项目使用的TLS版本,以及如何确认库是否更新。 这是我的源代码片段: 我认为重点是HurlStack类,它取决于包,但是我不知道TLS/SSL配置在哪里。

  • 我正在为一个班级作业制作一个石头剪刀游戏,我正在尝试编写一个方法,根据用户获胜、计算机获胜还是平局,返回整数1、2或3。我们不能简单地返回信息“你赢了!”或者“你输了!”或“平局!”在该方法中,我们必须返回整数。然而,当我这样键入代码时,Eclipse中会出现一个编译器错误警告,告诉我“此方法必须返回int类型的结果。”这不是我在这里要做的吗?帮助谢谢

  • 问题内容: 我有一个click事件发生在我的自定义指令范围之外,因此,我使用jQuery.click()侦听器并在我的范围内调用一个函数,而不是使用“ ng- click”属性,如下所示: close()是一个简单的函数,如下所示: 在我看来,我有一个绑定到isOpen的“ ng-show”元素,如下所示: 调试时,我发现正在调用close(),isOpen被更新为false,但是AngularJ