我的Web应用程序有两组服务。一组是像UserService这样的业务服务,另一组是像EmailService这样的实用服务。业务服务如何连接到公用事业服务是通过NServiceBus。在这种情况下如何执行集成测试?我现在所做的是我将集成测试分解为2个单元测试。首先是测试业务服务,然后模拟/验证NServiceBus发送。第二单元测试在公用事业服务上,然后模拟/验证电子邮件发送。如你所知,这根本不是最优的。目前我们有2个NServiceBus实例 - 一个作为客户端,一个作为服务器(服务器添加了处理程序)。这是在正常的非测试模式下工作(因为客户端是在IIS的上下文中,服务器是一个独立的应用程序)但是当我尝试在测试中执行此操作时,似乎我无法运行两个实例?有什么建议吗?
答案 0 :(得分:2)
听起来你正在通过模拟NServiceBus上的外部依赖来正确地进行单元测试。要清楚,我对单元测试的定义是它们不会在代码之外做任何事情(例如,使用MSMQ)。对于集成测试,您应该能够使用非常简单的东西来证明您能够将消息从一个系统传递到另一个系统,并且可能获得预期的最终结果。要进行此设置,您可以从测试夹具的安装方法中实际启动NServiceBus客户端/服务器(并在拆卸时将其丢弃)。无论它们是EXE还是在IIS中运行都无关紧要 - 您应该能够以编程方式在测试中启动/停止它们,即使它意味着调用Process.Start()或类似的东西。
或者,如果您的集成测试作为持续集成设置的一部分在构建服务器上运行,那么构建脚本可以确保在启动测试之前正确运行正确的进程,这可能会产生更多可重复且更快的结果。使用TeamCity和MSBuild或NAnt的组合,很容易做到这样的事情。