我为一个目前工作正常的项目创建了一些原型,但我希望能够验证从原型生成的代码将来是否继续有效。
我想要的是原型构建的一个阶段,它采用刚刚创建的原型,在其上运行mvn archetype:generate
,然后在生成的代码上运行mvn verify
以验证生成的代码是其实没问题。如果需要,我会写自己的mojo来做这件事,但想看看解决方案是否已经存在。我看到了archetype:integration-test
目标,但似乎正在做我想做的事。
答案 0 :(得分:14)
更新2013:现在比其他答案建议的要容易得多。
https://issues.apache.org/jira/browse/ARCHETYPE-334已于2011年8月完成
要使用,只需将单词install
放在上面提到的goal.txt
文件中,您正在调整的项目中的测试将作为正常构建的一部分进行调用。 (和/或OP的情况下verify
。)
但是,如果您不熟悉原型,请注意this popular mini-guide已过时,虽然它可以用于制作原型,但不可以运行原型集成测试。您应该按照here所述创建archetype-metadata.xml
文件。 (这也好得多,因为它使用文件集!)
另请注意,这些集成测试不会响应-DskipTests
,但可以通过以下方式解决此问题:
<build>
<plugins>
<plugin>
<artifactId>maven-archetype-plugin</artifactId>
<version>2.2</version>
<configuration>
<skip>${skipTests}</skip>
</configuration>
</plugin>
</plugins>
</build>
(虽然这个看起来就像它跳过整个插件一样,它实际上是有效的,可能是因为它回归到传统模式;而我找不到任何成功的方法来跳过{{1使用上面的代码执行目标。)
答案 1 :(得分:3)
除了使用maven-invoker-plugin的方法之外,我们使用的是另一种方法。在Maven Verifier的帮助下,您可以轻松地测试您的maven插件和原型。 只需将以下依赖项添加到您的maven测试项目的pom中:
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-verifier</artifactId>
<version>1.2</version>
</dependency>
现在你可以使用
了org.apache.maven.it.Verifier
进入正常的JUnit测试。使用验证程序,您可以运行maven目标和关于结果的一些断言。 有关完整示例,请查看我们的javascript-archetypes的集成测试maven模块: https://github.com/akquinet/javascript-archetypes
答案 2 :(得分:2)
我自己也在苦苦挣扎,并认为当使用maven-archetype-plugin的当前v2.3时,除了src / test / resources / projects / first / goal.txt之外,还需要一个src / test / resources / projects / first / archetype.properties包含这样的内容:
sourceEncoding=UTF-8
groupId=integrationtest.group
artifactId=integrationtest.artifactId
version=1.0.0-SNAPSHOT
package=org.eclipse.xtend.xtend-archetype.integrationtest
packageInPathFormat=org/eclipse/xtend/xtend-archetype/integrationtest
This pull request说明了一个完整的工作示例。
答案 3 :(得分:1)
要回答我自己的问题,“官方”功能正在开发中:
http://jira.codehaus.org/browse/ARCHETYPE-334
与此同时,此链接使用maven-invoker-plugin提供了一种解决方法:
http://maven.40175.n5.nabble.com/unit-testing-archetypes-td75257.html#a75257
答案 4 :(得分:0)
我想这将是像hudson这样的持续集成服务器的场景。
你要定义一份
的工作虽然这个可能可能以某种方式适合一个maven生命周期,但它会感觉像是一个可怕的混乱。改为使用CI。
答案 5 :(得分:0)
我看到了原型:集成测试目标,但它似乎没有做我想要的。
除非我误解了你想要的 ,否则archetype:integration-test
目标似乎是一个非常好的解决方案:
执行原型集成 测试,包括创建 来自当前原型的项目 具有已定义的属性和可选 与参考副本比较。一个IT 由一个目录组成 SRC /测试/资源/项目 含有:
- goal.txt(内容实际上未使用,但未来的版本应该解释它 作为针对生成的目标运行 项目:见ARCHETYPE-334),
- 带有项目生成属性的archetype.properties,
- 包含引用副本的可选引用/目录 从IT创建的预期项目。
根据上面的描述,这个目标允许精确地运行集成测试来检查使用当前原型生成的项目与预期结果,这看起来像一个干净,简单,自包含的方式来测试原型。
为什么这种方法不令人满意?我错过了什么?