【问题标题】:Does SpecFlow testing platform support async Tasks?SpecFlow 测试平台是否支持异步任务?
【发布时间】:2014-03-15 13:27:07
【问题描述】:

对 Specflow 步骤的异步/等待支持 => 我想将 SpecFlow 与 C#、windows phone 8 的 Async Await 功能一起使用, 带有 MSTest 的 SpecFlow 可以使用 async / await 执行代码,但不等待结果。

我已更改 BindingInvoker.cs 并升级到 .NET 4,以支持异步任务,现在接收 IOC 未初始化错误。

https://github.com/robfe/SpecFlow/commit/507368327341e71b2f5e2a4a1b7757e0f4fb809d

【问题讨论】:

  • 你写的测试怎么样?
  • 删除了一个没有回答你问题的答案,一般的要点是你需要单元测试框架来支持async而不是SpecFlow

标签: windows-phone-8 specflow


【解决方案1】:

是的。 SpecFlow 确实支持异步步骤
https://specflow.org/documentation/Asynchronous-Bindings/
例如:

[When(@"I want to get the web page '(.*)'")]
public async Task WhenIWantToGetTheWebPage(string url)
{
    await _webDriver.HttpClientGet(url);
}

在这一步完成之前它不会继续下一步,但它会释放线程以执行其他测试

【讨论】:

    【解决方案2】:

    异步支持已添加到 SpecFlow 中,并将包含在文本版本中。您可以使用 CI 构建来检查它。

    https://github.com/techtalk/SpecFlow/issues/542

    【讨论】:

      【解决方案3】:

      这里的问题是,如果我在后台线程上放置一些东西然后在测试执行模式下,主线程不知道它,它只是跳转到下一段代码来执行并验证结果,但直到那个点值是未在后台线程上更新。所以给出错误的断言。处理这个问题的方法是让主线程等待/休眠,直到后台工作结束。 示例:

      Dim caller As AsyncMethodHandler
      Dim result As IAsyncResult 
      caller = New AsyncMethodHandler(AddressOf lcl_service.CreateSession)
          result = caller.BeginInvoke(parameter, Nothing, AddressOf AsyncCallback, Nothing)
              While Not result.IsCompleted
                  Thread.Sleep(1)
              End While
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 2020-01-12
        • 2012-11-21
        相关资源
        最近更新 更多