使用webservice数据库和jms编写Java / Maven集成测试

时间:2015-12-16 11:09:39

标签: java web-services maven jenkins integration-testing

我正在维护一个Java企业应用程序,它暴露了一些Web服务,并与一些JMS队列和数据库进行交互。

我已经测试了大部分代码单元,并且我认为一切都很好,直到在重构中我在另一个包中移动了一个类并且在我的webservice中更改了命名空间而没有注意到并且破坏了所有客户端。 集成测试会抓住它,所以我试着写一个。

该应用程序部署在JBoss EAP 6.4上,如何在mvn verify步骤中进行Web服务调用? JMS队列怎么样?它们在Application Server上配置。 应用程序应该已经部署了吗? 我是否应该在verify步骤之前将应用程序与maven部署到JBoss安装或启动嵌入式Web服务器?

大多数文档都让我感到困惑,而且我常常看到模拟内容的建议,这不是集成测试(我已经在单元测试中做过)。

有人告诉我“只是使用Jenkins”,我阅读了文档,安装了它,但仍然不明白应该如何帮助我编写集成测试,因为无论如何都要运行mvn verify

1 个答案:

答案 0 :(得分:1)

这个主题过于宽泛,对于这个问题可能会有很多不同的正确答案,而且很大程度上取决于您使用的技术,所以我只关注这一部分:

  

在我没有注意到的情况下更改了我的webservice中的命名空间   打破所有客户

您也可以为端点创建单元测试,我一直使用spring-boot执行此操作。例如,下面的代码启动应用程序,运行testEndpoint()测试并立即关闭应用程序。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {MyApplication.class})
@WebAppConfiguration
@IntegrationTest("server.port:0")
public class MyControllerTest {

    @Value("${local.server.port}")
    private int port;

    @Test
    public void testEndpoint() {
        String endpointUrl = "http://localhost:" + port;
        // make a HTTP request here to test the endpoint
    }
}

我相信这可以通过任何spring-mvc应用程序完成,但代码会有所不同,并不像使用spring-boot那么容易。

虽然这通常会捕获端点中的大多数错误,但它并不能消除对已部署项目进行集成测试的需要。

现在关注更大的图景,如果你想创建端到端的测试,包括WebServices,JMS队列和数据库,我建议创建一个单独的项目,只有测试,可能使用Cucumber或类似的东西。应该在需要时(例如在部署之前,每小时,每次提交和/或每晚)在Jenkins(或任何其他CI工具)中触发此项目,并且它将要求已部署所有应用程序。

或者,您可以让Jenkins部署应用程序并仅针对此应用程序运行集成测试。在这种情况下,测试将取决于已部署的所有其他应用程序。