2010-07-30 73 views
0

我有Web应用程序,有2套服务。一套是像UserService这样的业务服务,另一套是像EmailService这样的实用程序服务。业务服务如何连接到公用服务是通过NServiceBus。如何在这种情况下执行集成测试?我现在所做的是,我打破了2个单元测试的集成测试。首先是测试业务服务,然后模拟/验证NServiceBus发送。第二次单元测试在公用事业服务上,然后模拟/验证电子邮件发送。如你所知,这并不是最理想的。目前我们有两个NServiceBus实例 - 一个作为客户端,另一个作为服务器(服务器增加了处理程序)。这项工作正常,非测试模式(因为客户端是在IIS的环境下,服务器是一个独立的应用程序),但当我尝试在测试中这样做,似乎我不能运行两个实例?有什么建议?你如何使用NServiceBus执行集成测试?

回答

2

这听起来像你正在做单元测试正确,嘲笑NServiceBus上的外部依赖。清楚的是,我对单元测试的定义是,他们不会在代码之外做任何事情(比如说使用MSMQ)。对于你的集成测试,你应该能够以非常简单的方式逃脱,证明你能够将消息从一个系统传递到另一个系统,并且可能获得预期的最终结果。要设置它,实际上可以从测试夹具的设置方法中启动NServiceBus客户机/服务器(并在拆卸过程中处理它们)。无论它们是EXE还是在IIS中运行都无关紧要 - 即使这意味着调用Process.Start()或类似的东西,也应该能够以编程方式在测试中启动/停止它们。或者,如果集成测试作为持续集成设置的一部分在构建服务器上运行,则构建脚本可确保在启动测试之前正确运行流程,这可能会导致更加可重复和更快速结果。使用TeamCity和MSBuild或NAnt的组合很容易做到这一点。

+0

嗯,我不同意他是“单元测试正确”。不要嘲笑你不拥有的东西。他需要模拟NServiceBus这一事实表明,他可能没有正确地抽象出对公共汽车的依赖。换句话说,高层次的策略对象依赖于低层次的细节。他应该能够单独测试这些物体,也许可以使用间谍来代替公交车,以便再次单独观察物体的期望行为。 (接下来) – fourpastmidnight 2016-02-19 14:56:03

+0

(续上)然后,正如他正确地观察到的,他还应该进行集成测试,以测试所有参与者(包括总线)之间的交互是否按预期工作(例如,消息正在发送/如预期通过公共汽车由其各自的对象接收)。 – fourpastmidnight 2016-02-19 14:56:43

相关问题