10.8 重用测试代码

优秀的程序员会像对待产品代码一样细心维护测试代码,尤其是那些供具体测试类继承的抽象类,它们能够简化测试代码的编写。还有一些根据具体项目环境对测试框架的扩展,也会被大范围地重用。

在命令行运行mvn package的时候,Maven会将项目的主代码及资源文件打包,将其安装或部署到仓库之后,这些代码就能为他人使用,从而实现Maven项目级别的重用。默认的打包行为是不会包含测试代码的,因此在使用外部依赖的时候,其构件一般都不会包含测试代码。

然后,在项目内部重用某个模块的测试代码是很常见的需求,可能某个底层模块的测试代码中包含了一些常用的测试工具类,或者一些高质量的测试基类供继承。这个时候Maven用户就需要通过配置maven-jar-plugin将测试类打包,如代码清单10-20所示。

代码清单10-20 打包测试代码


<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-jar-plugin</artifactId>

<version>2.2</version>

<executions>

<execution>

<goals>

<goal>test-jar</goal>

</goals>

</execution>

</executions>

</plugin>


maven-jar-plugin有两个目标,分别是jar和test-jar,前者通过Maven的内置绑定在default生命周期的package阶段运行,其行为就是对项目主代码进行打包,而后者并没有内置绑定,因此上述的插件配置显式声明该目标来打包测试代码。通过查询该插件的具体信息可以了解到,test-jar的默认绑定生命周期阶段为package,因此当运行mvn clean package后就会看到如下输出:


[INFO]——maven-jar-plugin:2.2:jar(default-jar)@account-captcha——

[INFO]Building jar:D:\code\ch-10\account-aggregator\account-captcha\target\

account-captcha-1.0.0-SNAPSHOT.jar

[INFO]

[INFO]——maven-jar-plugin:2.2:test-jar(default)@account-captcha——

[INFO]Building jar:D:\code\ch-10\account-aggregator\account-captcha\target\

account-captcha-1.0.0-SNAPSHOT-tests.jar


maven-jar-plugin的两个目标都得以执行,分别打包了项目主代码和测试代码。

现在,就可以通过依赖声明使用这样的测试包构件了,如代码清单10-21所示。

代码清单10-21 依赖测试包构件


<dependency>

<groupId>com.juvenxu.mvnbook.account</groupId>

<artifactId>account-captcha</artifactId>

<version>1.0.0-SNAPSHOT<version>

<type>test-jar</type>

<scope>test</scope>

</dependency>


上述依赖声明中有一个特殊的元素type,所有测试包构件都使用特殊的test-jar打包类型。需要注意的是,这一类型的依赖同样都使用test依赖范围。