1.概述

Maven是Java空间中最流行的构建工具,而集成测试是开发过程的重要部分。因此,使用Maven配置和执行集成测试是一种自然的选择。

在本教程中,我们将多种不同的方法来使用Maven进行集成测试,并从单元测试中单独集成测试。

2.准备

要使演示代码靠近真实世界的项目,我们将设置JAX-RS应用程序。此应用程序在执行集成测试之前部署到服务器并随后拆卸。

2.1。maven配置

我们将在泽西岛周围构建我们的REST应用程序 - JAX-RS的参考实施。此实现需要几个依赖项:

<依赖项>  org.glassfish.jersey.containers   jersey-Container-servlet-Core   2.27   <依赖项>  org.glassfish.jersey.inject   jersey-HK2   2.27  

我们可以找到这些依赖项的最新版本这里这里

我们将使用Jetty Maven插件来设置测试环境。此插件在此期间启动码头服务器pre-integration-testmaven构建生命周期的阶段,然后停止它后整合测试阶段。

下面是我们如何配置Jetty Maven插件pom.xml.

  org.eclipse.jetty   JETTY-MAVEN-PLUGIN   9.4.11.v20180605     8999    quit   9000   <执行> <执行>  start-jetty  <阶段>预集成 -测试 <目标> <目标>启动   <执行>  stop-jetty  <阶段>后集成-test  <目标> <目标>停止    

当码头服务器启动时,它会在港口侦听8999。这stopKeystopPort配置元素仅由插件使用停止目标及其价值从我们的角度来看并不重要。

这里是在哪里找到最新版本的jetty maven插件。

另一件事要注意到我们必须设置包装元素在pom.xml.文件到战争,否则码头插件无法启动服务器:

<包装>战争

2.2。创建REST应用程序

应用端点非常简单 - 返回Get请求命中何时遇到上下文root时:

@Path("/") public class RestEndpoint {@GET public String hello() {return "Welcome to Ba金宝搏188体育eldung!";}}

以下是我们如何向Jersey注册端点类:

包com.baeldun金宝搏188体育g.maven.it;进口org.glassfish.jersey.server.ResourceConfig;public class EndpointConfig extends ResourceConfig {public EndpointConfig() {register(RestEndpoint.class);}}

要使码头服务器是否了解我们的REST应用程序,我们可以使用经典web.xml.部署描述符:

  休息 -  servlet   org.glassfish.jersey.servlet.servletContainer    javax.ws.rs.application   com.b金宝搏188体育aeldung.maven.it.endpointConfig      rest-servlet   / *   

这个描述符必须放在目录中/ src / main / webapp/ web-inf要被服务器识别。

2.3。客户端测试代码

以下部分中的所有测试类都包含一个方法:

@test public void whensening_thenmessageisreturn()抛出IoException {String url =“http:// localhost:8999”;URLConnection Connection = New URL(URL).openconnection();尝试(InputStream Response = Connection.getInputStream();扫描仪扫描仪=新扫描仪(响应)){String responsebody = scanner.nextline();assertequals(“欢迎来到Baeldun金宝搏188体育g!”,响应者);}}

正如我们所看到的,这个方法只向我们之前设置的web应用程序发送GET请求并验证响应。

3.行动中集成测试

关于集成测试,需要注意的重要一点是金宝搏官网188be测试方法通常需要相当长的时间来运行。

因此,我们应该将集成测试从默认的构建生命周期中排除,以防止它们在我们每次构建项目时减缓整个过程。

单独集成测试的方便方法是使用构建配置文件。这种配置使我们仅在必要时执行集成测试 - 通过指定合适的配置文件。

在以下部分中,我们将使用构建配置文件配置所有集成测试。

4.使用FAILSAFE插件进行测试

运行集成测试的最简单方法是使用maven.失败插入

默认情况下,mavenSurefire.时执行单元测试测试阶段,而失败控件中运行集成测试集成测试阶段

我们可以使用不同模式命名测试类,为这些插件分开拾取封闭的测试。

强制执行的默认命名约定Surefire.失败是不同的,因此我们只需要遵循这些约定来隔离单元测试和集成测试。

执行Surefire.插件包括名称以何种名称的所有类测试,或以测试测试或者测试用例。相比之下,失败插件在名称开始的类中执行测试方法,或以或者itcase.

我们可以在哪里找到关于测试纳入的文件Surefire.,这里是为失败

让我们添加失败使用默认配置插入POM:

 failsafe    maven-failsafe-plugin< artifactId> 2.22.0    integration-test verify      

这个链接是在哪里找到最新版本的失败插件。

使用上述配置,将执行以下测试方法集成测试阶段:

公共类RESTIT {//测试方法2.3}

由于Jetty服务器在pre-integration-test阶段并关闭后整合测试,我们刚刚看到的测试通过此命令:

mvn验证-Pfailsafe

我们还可以自定义命名模式,以包含具有不同名称的类:

  maven- failsafety -plugin 2.22.0   **/* rest  **/RestITCase  …< /插件>

5。测试与Surefire插件

除了失败插件,我们也可以使用Surefire.插入在不同阶段执行单位和集成测试。

假设我们想用后缀命名所有集成测试整合最多。自从此以来Surefire.控件中使用此名称运行测试测试在默认情况下,我们需要将它们从默认执行中排除:

<插件>  Maven-Surefire-Plugin   2.22.0   <排除>  ** / * IntegrationTest    

这个插件的最新版本是这里

我们拍摄了所有测试课程以结尾的名称整合最多出于构建生命周期。现在是时候把它们带回来了:

  suffire      Maven-Surefire-Plugin   2.22.0  <执行> <执行> <阶段>集成测试 <目标> <目标>测试   <排除> <排除> none   <包含>  ** /* IntegrationTest         

而不是绑定测试的目标Surefire.插件的测试像往常一样建立阶段,我们将它绑在一起集成测试阶段。该插件将在集成测试过程中启动。

注意,我们必须设置排除元素到没有一个重写基本配置中指定的排除。

现在,让我们使用我们的命名模式定义一个集成测试类:

public class RestIntegrationTest{//在2.3小节中显示的测试方法}

此测试将使用命令运行:

MVN验证 - 普勒弗雷

6.测试与货物插件

我们可以使用Surefire.插入maven货物插件。这个插件内置了对嵌入式服务器的支持,这对于集成测试非常有用。

关于这个组合的更多细节可以金宝搏官网188be找到这里

7.与JUNIT进行测试@类别

有选择地执行测试的一种方便方法是利用这 @类别注解在JUnit 4框架中。这个注释允许我们从单元测试中排除特定的测试,并将它们包含在集成测试中。

首先,我们需要一个接口或类来作为类别标识符:

包com.baeldun金宝搏188体育g.maven.it;公共界面集成{}

然后,我们可以用@类别注释和一体化标识符:

@category(Integation.Class)公共类Restjunittest {//测试方法2.3}中所示

而不是宣布@类别在测试类上注释,我们也可以在方法级别使用它来对单个测试方法进行分类。

不包括来自的类别测试构建阶段很简单:

<插件>  Maven-Surefire-Plugin   2.22.0    com金宝搏188体育.baeldung.maven.it.integration   

包括一体化类别的集成测试阶段也是直接的:

 类别  <插件> <插件>  Maven-FailSafe-plugin   2.22.0   <包含> <包含> ** / * /包含>  <组> com.baeldung.mav金宝搏188体育en.it.integration   <执行> <执行> <目标> <目标>集成 - 测试 <目标>验证       

我们现在可以使用maven命令运行集成测试:

mvn验证-pcategory.

8.为集成测试添加单独的目录

有时是可取的,以便为集成测试具有单独的目录。以这种方式组织测试使我们能够完全隔离集成测试和单元测试。

我们可以使用maven构建辅助插件为此目的:

<插件>  org.codehaus.mojo   Build-Helper-Maven-Plugin   3.0.0  <执行> <执行> 添加 -集成 - 测试源 <阶段>生成 - 测试源 <目标> <目标>添加测试源     src/集成 - 测试/ java      

这里我们可以找到这个插件的最新版本。

我们刚刚看到的配置将一个测试源目录添加到构建中。让我们向这个新目录添加一个类定义:

公共类restitcase {//测试方法2.3}。

是时候在这个类中运行集成测试了:

mvn验证-Pfailsafe

Maven失败Plugin将执行这个测试类中的方法,因为我们在3.1小节中设置的配置。

测试源目录通常与资源目录一起。我们可以在另一个目录中添加这样的目录执行元素到插件配置:

<执行> ... <执行>  add-integration-test-resource  <阶段>生成 - 测试 - 资源       <目录> SRC / Integration-Test / Resources      

9.结论

本文介绍了如何使用Maven与Jetty服务器运行集成测试,重点介绍了Maven的配置Surefire.失败插件。

可以找到本教程的完整源代码在GitHub

通用的底部

使用Spring 5和Spring Boot 2开始,通过学习的春天课程:

>>看看这个课程
对这篇文章的评论关闭!