12

Silverlight 单元测试框架定义了处理异步调用的过程(从 Microsoft.Silverlight.Testing.SilverlightTest 派生测试类,添加异步属性,使用 EnqueueXXX 方法。)考虑到 SpecFlow 在测试类和步骤之间呈现的分离:

  • 是否可以使用这些工具来等待测试中异步运行的 Silverlight 方法调用(例如进行 Web 服务调用)?
  • 如果他们不能,那么在 SpecFlow 测试文件中处理此行为的指导是什么?(也许使用在事件处理程序中触发的 AutoResetEvent 并等待它?)
4

3 回答 3

3

使用 AutoResetEvent 将不起作用,因为 WaitOne 调用将阻塞 UI 线程。即使在对数据服务进行异步调用时,Silverlight 也会使用 UI 线程(请参阅这篇文章 - Thead 使用 WebClient 和 ManualResetEvent 被阻止),因此 WaitOne 实际上会停止调用该服务。

于 2011-05-09T05:41:50.647 回答
2

我知道这可能为时已晚,但这里有。

对于 silverlight 异步调用,您可以使用 Specflow AsyncContext api

https://github.com/techtalk/SpecFlow/wiki/Testing-Silverlight-Asynchronous-Code

我在这里开发的时候写过这个

http://rburnham.wordpress.com/2011/05/13/testing-silverlight-asynchronous-code-with-specflow/

它有助于解释这个概念。

于 2012-01-17T22:48:52.453 回答
1

我想每个看过并支持这个问题的人都在等待有人给出一个很棒、优雅的答案,但看起来这不会发生在这里。为了帮助其他现在需要可用答案的人......

我在其他单元测试情况下所做的是使用问题中提到的 AutoResetEvent :

AutoResetEvent MyAutoReset = new AutoResetEvent();
[TestMethod]
public void MyTestMethod()
{
   var MyItem.GetItem(x => 
      {
         // Return handler
         MyAutoReset.Set();
      });
   MyAutoReset.WaitOne(5000, false));
}

显然,这种方法需要考虑一些事情,但它可以传达这个想法。

于 2011-04-15T22:22:04.370 回答