Async / Await支持Specflow Steps => 我想使用SpecFlow和C#的Async Await功能,windows phone 8, 使用MSTest的SpecFlow可以使用async / await执行代码,但不等待结果。
我已经更改了BindingInvoker.cs并升级到.NET 4,以支持异步任务,现在接收IOC并未初始化错误。
https://github.com/robfe/SpecFlow/commit/507368327341e71b2f5e2a4a1b7757e0f4fb809d
答案 0 :(得分:0)
这里的问题是如果我在后台线程中放置一些东西然后处于测试执行模式,主线程不知道它并且它只是跳转到下一段代码来执行并验证结果,但是直到该点值是没有在后台线程上更新。所以给出错误的断言。处理此问题的方法是使主线程等待/休眠,直到后台工作结束。 例如:
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
答案 1 :(得分:0)
异步支持已添加到SpecFlow,并将包含在文本发行版中。您可以使用CI构建来检查它。
答案 2 :(得分:0)
是的。 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);
}
在完成此步骤之前不会继续进行下一步,但是它将释放线程以执行其他测试