4

为了清理一些乱七八糟的东西,我开始将我的测试代码全部放在一个普通的 java 项目中(全部在 src/main/java 中),然后将其声明为<scope>test</scope>另一个项目中的依赖项,并期望要运行的测试。

没有这样的运气。Surefire 只想运行它可以在源代码中看到的测试。

我可以在这里看到一个非常明显的解决方案,涉及 build-helper-plugin 并将测试作为源目录添加到测试编译环境中,但我希望避免它。

如果有人想知道,所有这一切的原因是使用故障安全插件运行一些集成测试的 POM 配置变得非常复杂,以至于我想将测试类的编译与测试的运行分开。

4

3 回答 3

8

现在可以使用 Maven Surefire v2.15。只需将以下类型的配置添加到 surefire 插件中:

<build>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.15</version>
    <configuration>
      <dependenciesToScan>
        <dependency>com.group.id:my-artifact</dependency>
        <dependency>com.group.id:my-other-artifact</dependency>
      </dependenciesToScan>
      ...
    </configuration>
    ...
  </plugin>
  ...
</build>

您还应该在依赖项部分声明实际的依赖项:

<dependencies>
  <dependency>
    <groupId>com.group.id</groupId>
    <artifactId>my-artifact</artifactId>
    <type>test-jar</type>
    <version>1.1</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>com.group.id</groupId>
    <artifactId>my-other-artifact</artifactId>
    <type>test-jar</type>
    <version>1.1</version>
    <scope>test</scope>
  </dependency>
</dependencies>
于 2013-06-11T10:29:41.213 回答
3

没有这样的运气。Surefire 只想运行它可以在源代码中看到的测试。

这目前不可能开箱即用,surefire 只查看以下类target/test-classes

这实际上记录为SUREFIRE-569 - 应该有一种方法可以从依赖项 jar 运行单元测试

我可以在这里看到一个非常明显的解决方案,涉及 build-helper-plugin 并将测试作为源目录添加到测试编译环境中,但我希望避免它。

当前的解决方法是使用在阶段之前将dependency:unpackjar 解包到。target/test-classestest

于 2010-08-22T21:40:42.183 回答
1

你不能反过来做吗?

我的意思是将代码放在 src/test/java 中,取决于您的主模块,并在您的测试模块中运行测试?

于 2010-08-22T21:32:13.013 回答