maven JUnit

来源:互联网 发布:怎么样申请淘宝子账号 编辑:程序博客网 时间:2024/06/07 00:28

maven倡导约定优于配置,而maven的约定目录结构为:
- src/main/Java 下存放java类
- src/main/webapp 下存放页面文件(需要手动创建)
- src/main/resources 下存放资源文件
- src/test/java 下存放单元测试代码
- src/test/resources 下存放测试资源文件

maven运行的生命周期为:

  • 复制src/main/resources资源文件到输出目录

  • 编译src/main/java下的源代码

  • 复制src/test/resources下的测试用资源文件到测试输出目录

  • 编译src/test/java下的测试用例

  • 运行测试用例

  • 打包生成

默认情况下,maven集成了maven-surefire-plugin插件,该插件会去查找src/test/java下所有包含Test的类作为测试类,测试类会去src/test/resources下查找测试资源。我们只需在测试方法上使用@Test注解,那么测试就顺理成章了;

mvn 在默认情况下,执行maven test/maven package/maven install命令时会在target/surefire-reports目录下生成txt和xml格式的输出信息;

其实maven也可以生成html格式的报告,只需要用一个插件即可:maven-surefire-report-plugin。

这个插件的特点:
1.能把生成的xml报告转换成html
2.能指定哪些测试类需要被执行,哪些测试类不被执行
3.能兼容JUnit 3、JUnit 4以及TestNG
4.在默认情况下,我们无法在在某一个生命周期去调用它,因为并不是所有的用户每次构建软件的时候都会需要html格式。

如果要生成html格式的测试报告,我们需要单独执行命令:mvn surefire-report:report
调用这个命令会执行的步骤:
1.先编译源文件和测试用例
2.再调用surefire插件(这个插件主要是用来执行单元测试的插件)生成txt和xml个数的测试输出信息
3.surefire报告插件(也就是maven-surefire-report-plugin)会把target/surefire-reports下的所有xml报告转换成一份html格式的文件。并将这个html格式的测试报告保存在target/site目录下。

示例:
在项目的根目录下执行:mvn surefire:test

运行结果:

查看生成的xml和txt测试报告(生成的测试报告默认路径:/project_path/target/surefire-report)

txt和xml格式的测试报告不直观,我们用maven-surefire-report插件将它们转成HTML格式:
1. 添加插件的依赖:

<plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-surefire-report-plugin</artifactId></plugin>
  1. 在项目的根目录下执行:mvn surefire-report:report

运行结果:

由此图可以验证我们上面所说的该命令的执行步骤,即:
复制src/main/resources资源文件到输出目录
编译src/main/java下的源代码
复制src/test/resources下的测试用资源文件到测试输出目录
编译src/test/java下的测试用例
运行测试用例

  1. 查看生成的html测试报告(html格式测试报告默认存储路径:project_path/target/site/xxx.html)
    如图:

  2. 我们还想查看一下代码的覆盖率,那么就使用maven的maven-corertura插件;
    maven-corertura插件介绍:
    cobertura是一款用来计算java代码测试覆盖率的工具,基于jcoverage。能计算每个类、包、整个工程的行覆盖率和分支覆盖率以及代码复杂度(Cyclomatic complexity)并生成html或xml形式的报告,让用户很方便的查看代码的单元测试覆盖率情况。cobertura的原理是通过对class文件进行插桩然后计算。
    在项目目录下运行mvn cobertura:cobertura即可生成target目录下生成site\cobertura目录,里面存放了所有的单元测试报告,组织形式如javadoc.其中index.html对所有包的覆盖率做了统计;

    cobertura-maven-plugin还提供了mvn cobertura:check命令来在verify阶段查看代码覆盖率是否达到预设要求,给项目管理者提供了一个检查代码覆盖率的工具。

maven-corertura插件使用:
a、首先在pom中添加配置

<plugin>  <groupId>org.codehaus.mojo</groupId>  <artifactId>cobertura-maven-plugin</artifactId>  <version>2.5.2</version>  <configuration>     <encoding>UTF-8</encoding>     <formats>        <format>html</format>        <format>xml</format>     </formats>     <check/>  </configuration></plugin>

b、运行goal
在项目根目录下运行mvn cobertura:cobertura 将会插桩class文件、测试、生成覆盖率报告,如图:

运行结果:

由上图,可以验证cobertura命令的执行步骤:
复制资源文件到目标目录;
编译主体代码
编译测试代码
运行测试代码
c、在target\site\cobertura目录下生成报告文件,打开index.html可以查看具体报告,如图:
生成的html格式的代码覆盖率报告:

打开index.html,查看具体情况:

小结
使用maven的 maven-surefire-plugin插件可以运行单元测试代码,并生成xml和txt格式的测试报告;
使用maven的 maven-surefire-report-plugin插件可以运行单元测试代码,并将生成的xml和txt格式的测试报告聚合成HTML格式的测试报告;
使用maven的 cobertura-maven-plugin插件可以运行单元测试代码,并生成代码覆盖率报告;
我们将这些maven goal配置到jenkins上,依靠 jenkins实现自动化测试的同时还能得到HTML格式的测试报告和代码覆盖率报告,详见后续的jenkins配置;
Notes:
测试包和测试类的规范:
src/main/java目录存放项目的主体代码

src/main/test目录存放项目的测试代码

src/main/test目录下的包命名规则:xxxTest(xxx为src/main/java目录下的包名,即src/main/java目录下的每个包,如xxx,在src/main/test目录下都有一个名称为xxxTest或Testxxx的包相对应)

src/main/test目录下的测试类命名规则:xxxTest(即src/main/java目录下的每个类xxx都有一个名称为xxxTest或Testxxx的测试类相对应)

src/main/test目录下的测试方法命名规则:xxxTest(即src/main/java目录下的每个类xxx的每个方法yyy在对应的xxxTest包的xxxTest测试类中都有一个yyyTest相对应)

备注
cobertura支持的goal总结

  • cobertura:check
    Check the Last Instrumentation Results.

  • cobertura:clean
    Clean up rogue files that cobertura maven plugin is tracking.

  • cobertura:dump-datafile
    Cobertura Datafile Dump Mojo.

  • cobertura:instrument
    Instrument the compiled classes.

  • cobertura:cobertura
    Instruments, Tests, and Generates a Cobertura Report.

原创粉丝点击