【问题标题】:Maven install task seems to run tests on old code before compilingMaven 安装任务似乎在编译之前对旧代码运行测试
【发布时间】:2020-04-17 07:52:51
【问题描述】:
  1. 假设我有一个工作代码库。此时从 Intellij idea 运行 mvn install 工作正常
  2. 假设我通过将assertTrue(false) 添加到其中一项测试中来破坏我的一项测试
  3. 现在我运行maven install,它输出Results: Tests run: 3, Failures: 0, Errors: 0, Skipped: 0,然后说BUILD SUCCESS!
  4. 但是,如果我再次运行maven install,我会得到输出[ERROR] Tests run: 3, Failures: 1, Errors: 0, Skipped: 0

反过来也一样。因此,如果我现在从我的一项测试中删除 assertTrue(false),执行 mvn install 仍然会触发错误,指出测试失败,但如果我再次运行它,它就会成功。

这不是真正的正常行为还是我做错了什么?我对 Maven 和 JUnit 没有太多经验。

我的工作流程一直是只运行一次 maven install 并将其安装在本地,以便我的其他项目可以将其作为依赖项,并且我会在目标文件夹中获得一个输出并最小化的 jar。

我刚刚添加了 JUnit Jupiter 和 Surefire。这是我的pom.xmlhttps://gist.github.com/VapidLinus/63103122483cb53ee9a534c229fbd72f

编辑:如果我在 测试 中更改某些内容,这似乎只是个问题。如果我破坏了测试的实际实现,mvn install 会在第一次运行时检测到问题。

【问题讨论】:

  • 在 intellij idea 中运行 mvn install 而不是运行 mvn clean install 并检查。如果在命令提示符下运行会更好。
  • 根据发布的要点,我发现您的 pom 文件存在几个问题:将插件作为依赖项是完全错误的。在 maven-surefire 中使用包含违反了配置范例的约定(遵循命名约定: *Test.java 用于单元测试..)。要使用 JUnit Jupiter,您必须添加 junit-jupiter-engine 依赖项而不是 JUnit Jupiter ...您还应该升级 maven-compiler-plugin 这可能会导致您描述的问题...
  • 感谢@khmarbaise 的建议!我对 Maven 还是新手,所以还有很多我不知道或不了解的地方。不确定将插件作为依赖项错误是什么意思,您的意思是我的另一个 Spigot 插件?除非我有一个包含,否则我无法让 Maven 运行我的测试,但我现在将其更改为<include>**/*Test.java</include>,而不是它也可以工作。从我阅读的指南/教程中,他们只添加了 JUnit Jupiter 作为依赖项,并且它似乎有效 - 这样做有什么问题?我会更新我的 maven 编译器插件 :) 再次感谢,一直在努力学习和改进
  • 我的意思是你的依赖区域中有 maven-surefire-plugin。此外,使用分类器 sourcesjavadoc 的依赖项没有意义......因为它们不能在类路径上使用......
  • @VapidLinus,您是否尝试过@Deb 提出的建议?这样就可以清楚的知道是Idea,还是Maven相关的问题。

标签: java maven intellij-idea junit maven-surefire-plugin


【解决方案1】:

你可以尝试运行mvn install -DskipTests

一个明确的解决方案是在 Surefire 项目配置中禁用它。

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.0.0-M4</version>
        <configuration>
          <skipTests>true</skipTests>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

Reference

【讨论】:

  • -DskipTests 非常适合在开发过程中提高编译速度。但是这个问题告诫 first 测试似乎是在旧的测试代码上。另一个问题。
  • skipTests 是做什么的?我不确定我想跳过我的测试。我只是希望编译在我破坏某些东西时可靠地失败并且测试应该捕获它
猜你喜欢
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多