当前位置:  开发笔记 > 编程语言 > 正文

什么是从junit中拦截http调用的最简单方法?

如何解决《什么是从junit中拦截http调用的最简单方法?》经验,为你挑选了1个好方法。

我们有一些测试,我们从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调用来做到这一点.但它会有点混乱.这样做有简单,标准的方法吗?



1> jpmc26..:

最简单的方法是不要.

首先,您所描述的内容显然不是单元测试.单元测试是一种与应用程序的其余部分隔离测试一小部分代码的测试,更不用说外部资源了.相反,您正在测试整个应用程序,并且应用程序具有外部依赖性.这很好,但这些测试属于集成或功能测试类别.(实际上,您可能仍然使用单元测试框架来编写这些类型的测试,但区别很重要.)

其次,你真的希望通过这样做获得什么?如何提高应用程序A的可靠性或质量?它很可能不会,并且尝试维护设置和额外断言的额外复杂性实际上会使一切都不那么易于维护.

所以这就是我要做的:

    写一系列逻辑上的各个位单元测试的应用程序A和B.这些将在隔离测试逻辑.(我建议您首先单独执行单元测试,然后在单元测试失败时,您的构建可能会在执行集成和功能测试之前快速失败.集成和功能测试会更慢,更麻烦,所以这会通知您问题更快.在这一点上由你决定.)

    编写一系列集成或功能测试,检查应用程序B在给定特定输入的情况下给出正确的输出.

    在A的输入和输出上写一系列集成或功能测试.在编写它们时,让它只调用真实的B并假设B按预期工作.如果不是,您的应用程序B测试将接收它,并且您将在应用程序中有一些额外的故障A测试,您可以忽略直到B修复.

你不必嘲笑一切.试图这样做会比你节省更多的麻烦.过于复杂的测试将是净损失.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有