Aug 232011
 

写完一个插件之后,我们就需要对他进行测试
如果我们用人工测试的话,将会非常麻烦,因为maven插件本身的发布流程就非常复杂
你需要编译打包你的maven插件,然后安装到本地库(或远程私库中),然后写一个sample project,再运行,看一下是否正确
当然你也可以用单元测试来解决一些问题,但是单元测试比较难保证插件最终正确,而且maven插件很经常是跟文件打交道

这里我们就需要对maven插件进行自动化的集成测试
maven的生命周期是包含集成测试的,默认是没有绑定任何功能。不过如果你google一下,会找到一些maven进行集成测试的例子,大致就是启动jetty,然后通过http访问验证,再关闭jetty

我们这里使用的是maven-invoker-plugin,它就是用于maven插件的集成测试

先在pom.xml中加入

<build>
	<plugins>
		<plugin>
			<artifactId>maven-invoker-plugin</artifactId>
			<configuration>
				<cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
			</configuration>
			<executions>
				<execution>
					<id>integration-test</id>
					<goals>
						<goal>install</goal>
						<goal>run</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

cloneProjectsTo是先将测试案例拷贝出来再运行
execution段的设定是把maven-invoker-plugin的两个goal绑定到integration-test上
integration-test这个生命周期会在mvn install之前调用

集成测试的内容放在 src/it 目录下,每新建一个目录代表一个独立的测试,里面放一个完整的maven项目,当然你在这个项目里面需要引入自己编写的maven插件并且运行
另外还需要一个postbuild.groovy文件,放在测试案例的根目录,这个脚本的用处是检查运行后的maven项目是否达到自己要的效果。很明显,看名字就知道用groovy来写,一般我们会检查一下,是否产生了某某文件等等来判定,如果不正确的话抛出异常

然后我们在maven插件目录运行mvn integration-test就能进行集成测试了