2016-03-05 79 views
0

我有一个maven项目(github),广泛使用Maven集成测试verifierMaven验证器集成测试没有发现测试中的神器

测试是指我正在测试的项目。例如,这pom作用:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <version>1.4.1</version> 
     <dependencies> 
     <dependency> 
      <!-- My project which customizes the plugin. --> 
      <groupId>com.google.security</groupId> 
      <artifactId>fences-maven-enforcer-rule</artifactId> 
      <version>1.2-beta-SNAPSHOT</version> 
     </dependency> 
     </dependencies> 
     ... 

如果这种依赖性是相对路径../../../../../pom.xml。

然后我的junit test使用Verifier来运行集成测试。

// testProjectName is the basename of the directory 
// containing the POM above. 

File testDir = ResourceExtractor.simpleExtractResources(
    getClass(), "/" + testProjectName); 

Verifier verifier = new Verifier(
    testDir.getAbsolutePath(), 
    null, debug == Debug.VERBOSE, true /* forkJvm */); 
// Clean up after previous runs. 
verifier.deleteArtifacts("test"); 
Result goalResult = Result.PASS; 
try { 
    verifier.executeGoal("verify"); 
} catch (@SuppressWarnings("unused") VerificationException ex) { 
    goalResult = Result.FAIL; 
} 

我可以通过做mvn install -DskipTests=true && mvn test测试这一点,但就是不太理想,因为如果我更改代码,而无需重新安装,我结束了竞选对手了过期的版本测试,因为有人下载项目第一次不能只做mvn test

是否有一些方法来调整POM或junit TestCase,以便依赖关系在刚编译到target/classes的类上?

+0

不知道我明白这个问题。 'fences-maven-enforcer-rule'是你想在测试中出现的神器吗?为什么要声明'maven-enforcer-plugin'?你能否扩展你想做什么,你在做什么以及有什么问题? – Tunaki

+0

@Tunaki,好问题。我的项目('fences-maven-enforcer-rule')定义了一个自定义['EnforcerRule'](https://maven.apache.org/enforcer/enforcer-api/writing-a-custom-rule.html)。我正在测试该规则,执行者插件和各种配置之间的交互。 –

+0

等等,所以你说'fences-maven-enforcer-rule'不能访问正在构建的项目中的类。问题是什么? – Tunaki

回答

1

您需要在构建dependend项目之前构建并安装depenendy,或者两者都必须是同一个reactor构建的一部分。如果它在同一个模块中(至少不是工件依赖项,测试类自动在测试类路径上 - 但插件可能不会从那里加载),我认为它不起作用。

+0

因此,创建一个聚合POM并运行测试作为其验证阶段的一部分可能是可能的吗? –

+0

我认为你可以通过一个模块建立你的规则,第二个模块包含它们的IT。 – eckes

+0

好的,所以我会通过运行聚合项目的验证阶段进行验证,并且第一个模块将是我推送给maven central的工件。很公平。 –