我们有一些测试,我们从shell脚本运行。他们调用系统A,后者又调用系统B.因此,我们有3个独立的JVM。这些测试是完全自动化的,无需人工干预jenkins系统即可运行。
作为测试的一部分,我想截取从A到B的调用并检查有关内容的各种内容。呼叫仍然需要到达B,并且B的响应需要不加改变地返回到A.
系统A具有告诉它B在哪里的配置。它们都在我的本地机器上运行,所以显而易见的选择是在测试中启动一个http服务器(可能是jetty),配置A与我的临时服务器通信,然后当我运行我的测试时,服务器将看到所有流量从A发送到B.然后需要将这些请求传递给B,获取响应,并将该响应返回给A.单元测试然后需要将每个请求的内容看作String,并对其进行一些检查
我过去使用码头做过类似的事情。我之前的存根解决方案做了一些非常相似的事情:但它不是代理调用另一个系统,而是简单地检查了请求并返回了一个虚拟响应。我们被限制使用jetty 6.1 - 使用另一个版本是可行的,但是PITA。
我认为码头可能是最好的解决方案。我可以通过扩展AbstractHandler
,然后创建一个新的系统B的http调用来做到这一点。但它会有点混乱。有一种简单,标准的方法吗?
答案 0 :(得分:5)
最简单的方法是不要。
首先,您所描述的显然不是单元测试。单元测试是一种与应用程序的其余部分隔离测试一小部分代码的测试,更不用说外部资源了。相反,您正在测试整个应用程序,和应用程序具有外部依赖性。这很好,但这些测试属于集成或功能测试类别。 (实际上,您可能仍然使用单元测试框架来编写这些类型的测试,但区别很重要。)
其次,你真的希望通过这样做获得什么?如何提高应用程序A的可靠性或质量?它很可能不会,并且尝试维护设置和额外断言的额外复杂性实际上会使所有更少可维护。
所以我会这样做:
你不必嘲笑一切。试图这样做会比你节省更多的麻烦。过于复杂的测试将是净损失。