我有一个小批量程序,其工作是使用各种参数调用SSRS 2008 Web服务并路由生成的报告。 (由于各种原因,SSRS订阅在此环境中无效。)
目前,它使用Parallel
类一次运行多个报告,并利用报表服务器处理多个同时请求的能力。但是我已经读过(在评论here中)这不是要走的路:因为我们在客户端的多个线程上传播的是I / O而不是处理负载,所以做的是对Web服务进行异步调用并等待结果。
VS 2010为我生成了一个包含xxxxAsync
方法和xxxxCompleted
事件的Web服务客户端。设置几个调用方法相对简单,一个调用Web服务Render2Async
方法,另一个调用Render2AsyncCompleted
。
但现在我处于陌生的领域。首先,这打破了我的所有测试。如何测试异步Web服务:通过编写异步测试?我的应用程序是否需要触发自己的EventCompleted消息,以便测试可以知道应用程序已完成给定的报告并且测试可以继续?
其次,如何防止应用程序过早终止?我已经阅读了WaitHandle
及其方法,但是WaitHandle.WaitAll
假设您可以访问所有任务中的等待句柄,并且Web服务客户端不会公开任何等待句柄。 Render2Async
方法没有返回值。
非常感谢。
答案 0 :(得分:1)
NUnit支持delayed constraint 'After',允许您在这种情况下定期轮询测试。 here和here之后的NUnit示例。它在技术上并不全面,因为它是一种简单的轮询解决方案,但它易于使用,并且可以在一些简单的情况下工作。
Microsoft的Silverlight测试框架使用EnqueueXXX方法提供了更全面的支持,如文章here和here所示。
最后,使用ManualResetEvent进行单元测试的“手动”方式也显示在this article中。