在返回普通任务的方法上设置期望值

jak*_*don 1 .net c# unit-testing rhino-mocks async-await

我正在努力使用正确的方法来模拟和设置一个返回普通(即非泛型)的方法的期望Task.假设我有一个ICanNotCode使用以下方法调用的接口:

async Task DoSomethingIncredible();
Run Code Online (Sandbox Code Playgroud)

我正在使用Rhino Mocks作为我的模拟框架,并且一直在尝试为使用此接口的单独方法编写测试.期望看起来像这样:

canNotCodeMock.Expect(mock => mock.DoSomethingIncredible()).Return(new Task(() => { }));
Run Code Online (Sandbox Code Playgroud)

代码编译,但每当我运行Visual Studio时,它就会挂起,直到我手动终止任务运行器.

对返回方法设定期望的正确方法是Task什么?非常感谢你的帮助!

i3a*_*non 5

使用Task构造函数创建一个任务而不启动它,因此它永远不会完成.任何代码await都不会继续前进.这可能是您的环境陷入困境的原因.如果您只需要完成的任务,那么呼叫者可以继续使用Task.FromResult:

canNotCodeMock.Expect(mock => mock.DoSomethingIncredible()).Return(Task.FromResult(-1));
Run Code Online (Sandbox Code Playgroud)

实际结果并不重要,因为泛型Task<int>继承自非泛型Task.