为调用异步方法的同步方法编写单元测试的正确方法是什么。
现在我的单元测试正在通过,但是当我尝试打开页面时,它永远不会返回。
为什么我的单元测试没有失败?我怎样才能让它失败?
我用这个简单的代码复制了我的问题:
我的通过测试:
[TestMethod]
public void DoSomeWork_WhenWeDoSomeWork_ShouldReturnDone()
{
var service = new SyncService();
const string expected = "Done";
var actual = service.DoSomeWork();
Assert.AreEqual(expected, actual);
}
我的观点永远不会回来:
public ActionResult Index()
{
var syncService = new SyncService();
return View((object)syncService.DoSomeWork());
}
我永远不会返回查看的服务:
public class SyncService
{
public string DoSomeWork()
{
return SomeWork().GetAwaiter().GetResult();
}
private async Task<string> SomeWork()
{
var task1 = Task.Delay(1000);
var task2 = Task.Delay(1000);
await Task.WhenAll(task1, task2);
return "Done";
}
}
最佳答案
我不认为我可以用这个具体的例子来帮助你,但我认为一个好的一般策略是编写两个测试。一个用于测试同步方法是否传递了正确的数据,另一个用于测试异步方法是否正常工作。
我主要使用 JavaScript 工作,这种通用方法对我有用。您也可以查看测试框架的文档,也许它为此提供了一些方法。
关于unit-testing - 如何对调用异步方法的同步方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641147/