一般来说为了使项目结构保持清晰,主代码和测试代码应该分别位于独立的目录中。

    Maven项目中默认的主代码目录是src\main\java,对应的Maven项目中默认的测试代码目录是src\test\java。因此,首先我们创建该目录。

    在Java领域中,由Kent Beck和Erich Gamma建立的JUnit是事实上的单元测试标准。要使用JUnit,首先需要为HelloWorld项目添加一个JUnit依赖,修改项目的POM文件如下:
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xv.maventest</groupId>
    <artifactId>helloworld</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>Maven Hello World Project</name>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
代码中添加了dependencies元素,该元素下可包含多个dependency元素,以声明项目的依赖。如上代码所示,添加了一个对于JUnit的依赖。添加了依赖声明后,Maven就能够自动从仓库中下载junit-4.7.jar。这是使用Maven构建项目的便利之一。

    上述的代码中还有一个元素为scope,scope为依赖范围,若依赖范围为test则表示该依赖只对测试有效。换句话说,就是测试代码中的import Junit代码是没有问题的,但是如果在主代码中用import Junit代码,就会造成编译错误。如果不声明依赖范围,那么默认值就是compile,表示该依赖对主代码和测试代码都有效。

    配置了测试依赖,那么接下来就开始编写测试类:
package com.xv.maventest.helloworld;

import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class HelloWorldTest{

    @Test
    public void testSayHello(){

        HelloWorld helloworld = new HelloWorld();
        String result = helloworld.sayHello();
        assertEquals("HelloWorld",result);
    }
}
一个典型的单元测试包含三个步骤:1.准备测试类及数据;2.执行要测试的行为;3.检查结果。

    测试用例编写完毕后,可以调用Maven进行测试。运行如下命令:
mvn clean test
因为本人也是刚开始学习,因此本地仓库并没有Junit相关的jar包,因此执行该命令后,Maven首先会去下载JUnit的4.7版本,正是pom.xml文件声明依赖的部分,如下图所示:

java 的maven test类快速 maven测试类怎么写_maven

下载完毕后,Maven会解决依赖问题,之后会执行测试,如下图所示:

java 的maven test类快速 maven测试类怎么写_ci_02

在上面的图中,我们可以看到虽然我们是在运行测试,但是Maven显然不止执行了这两个任务,实际上还有clean:clean,resources:resources,compile:compile,resources:testResources以及compile:testCompile。

    在Maven执行测试之前,它会自动先执行项目主资源处理,主代码编译,测试资源处理,测试代码编译等工作,这是Maven生命周期的一个特性。

    在上图中我们可以看到一个测试报告,包括了一共运行了多少测试,失败了多少,出错了多少,跳过了多少。目前来说我们测试是通过了。