0

我有一个小批处理程序,它的工作是使用各种参数调用 SSRS 2008 Web 服务并路由生成的报告。(由于各种原因,SSRS 订阅无法在此环境中工作。)

目前,它使用Parallel该类一次运行多个报表,并利用报表服务器处理多个同时请求的能力。但是我已经读到(在这里的评论中)这不是要走的路:因为我们在客户端上跨多个线程传播的是 I/O 而不是处理负载,要做的事情是对 Web 服务进行异步调用并等待结果。

VS 2010 为我生成了一个包含xxxxAsync方法和xxxxCompleted事件的 Web 服务客户端。设置几个要调用的方法相对简单,一个调用 Web 服务Render2Async方法,另一个处理Render2AsyncCompleted.

但现在我在陌生的领域。首先,这打破了我所有的测试。如何测试异步 Web 服务:通过编写异步测试?我的应用程序是否需要触发自己的 EventCompleted 消息,以便测试可以知道应用程序已完成给定报告并且测试可以继续?

其次,如何防止应用程序过早终止?我已经阅读了WaitHandle它及其方法,但WaitHandle.WaitAll假设您可以访问所有任务的等待句柄,并且 Web 服务客户端没有公开任何等待句柄。该Render2Async方法没有返回值。

非常感谢。

4

1 回答 1

1

NUnit 支持延迟约束“After”,允许您在这种情况下定期轮询测试。NUnit 的示例 After herehere。它在技术上并不全面,因为它是一个简单的轮询解决方案,但它易于使用并且可以在一些简单的情况下工作。

Microsoft 的 silverlight 测试框架使用 EnqueueXXX 方法提供了更全面的支持,如这里这里的文章中所示。

最后,本文还展示了使用 ManualResetEvent 进行单元测试的“手动”方式。

于 2012-09-02T04:45:21.663 回答