unit-testing - 如何对调用异步方法的同步方法进行单元测试?

标签 unit-testing asynchronous synchronous async-await

为调用异步方法的同步方法编写单元测试的正确方法是什么。
现在我的单元测试正在通过,但是当我尝试打开页面时,它永远不会返回。
为什么我的单元测试没有失败?我怎样才能让它失败?

我用这个简单的代码复制了我的问题:

我的通过测试:

   [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/

相关文章:

.net - 使用 dotCover 时测试结果不一致

unit-testing - 分发包含单元测试的 R 包

angular - 如何等待渲染组件,直到在 Angular 2 中收集到所有数据

android - 如何连续执行多个 RxJava2 flux

javascript - 如何在加载 JSON 之前停止 Angular 执行?

c# - 我可以异步运行同步代码以获得性能吗?

javascript - Karma 中的单元测试 : Keypress inside a text Input

c# - 生命周期范围由 IoC 容器处理的单元测试对象

javascript - 在 node.js 中以固定延迟轮询

iphone - 同步 AFNetworking 调用