【问题标题】:Surefire doesn't launch test in src/main/javaSurefire 不在 src/main/java 中启动测试
【发布时间】:2012-02-17 16:54:34
【问题描述】:

我需要根据 maven-jar-plugin 文档中的建议将一些 src/test/java 移动到 src/main/java => http://maven.apache.org/plugins/maven-jar-plugin/usage.html

我这样做是因为,我在测试范围内的另一个项目中使用了测试(帮助程序)类。

所以我创建了 my-project-test,移入了测试类,并配置了 surefire 以指定测试类目录 =>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <testSourceDirectory>${basedir}\src\main\java\</testSourceDirectory>
            </configuration>
        </plugin>
    </plugins>
</build>

但是当我启动 mvn test 时,执行了 0 个测试 =>

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

问题与这个相同 => Maven does not find JUnit tests to run 但解决方案(配置surefire maven插件)对我不起作用。

【问题讨论】:

  • 您是否正在尝试运行集成测试?此外,您为什么要定义 testSourceDirectory ?为什么要使用反斜杠?
  • 正如@khmarbaise 提到的,它可能来自反斜杠。
  • 我试过 ${basedir}/src/main/java/ 或 src/main/java/ 但它是相同的测试运行:0,失败:0,错误:0,跳过:0跨度>

标签: unit-testing maven maven-surefire-plugin


【解决方案1】:

由于测试类现在已放置在src/main/java 中,它们很可能在编译 阶段被编译为target/classes

因此,虽然 Surefire 配置为指示测试源位置为 src/main/java,但它仍会在 target/test-classes 中查找测试类,因为这是测试类的默认位置。

您可以尝试适当地指定testClassesDirectory参数,看看它是否有效。

另外,我认为您可能误解了 maven jar 插件文档中的建议。我不相信他们建议将测试源移至src/main/java

【讨论】:

  • 好的,我会试试的。但是 maven jar 插件推荐接缝清晰:“将源文件从 src/test/java 您要共享的原始项目移动到该项目的 src/main/java。相同类型的移动也适用于资源当然。”
  • @Antoine。你是对的。我熟悉the easy way,但从未意识到the preferred way。我也会更新答案。
【解决方案2】:

maven surefire 插件的好配置是 =>

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <testSourceDirectory>${basedir}/src/main/java/</testSourceDirectory>
                    <testClassesDirectory>${project.build.directory}/classes/</testClassesDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>

Results :

Tests run: 20, Failures: 0, Errors: 0, Skipped: 0

【讨论】:

  • 虽然这样可以,但它绝不是一个好的配置,因为它不遵循Maven的做事方式。来源应位于src/main/java。他们编译的类将在target/classes。测试源应位于src/test/java。他们编译的类将在target/test-classes。这是正确的约定,这样 Surefire 就可以开箱即用。将测试放在与模块源代码相同的目录中是不对的。
  • 我没有将测试类放在同一个目录中,我创建了另一个以“-tests”为后缀的项目。这是 maven-jar-plugin help => maven.apache.org/plugins/maven-jar-plugin/usage.html => "如何创建包含测试类的 jar" => "首选方式" 的建议
  • 谢谢 - 这对我帮助很大。我正在开发一组(最初)未通过单元测试但位于 src/main 中的 koans(已经完成的 koans 在 src/test 目录中),因此我需要能够在代码上调用 surefire JUnit 插件在 src/main.非常感谢您的帮助。
  • 这也适用于 maven-failsafe-plugin。这就是我需要这个!谢谢,@Antoine!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 2013-09-10
  • 2016-11-19
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
相关资源
最近更新 更多