当前位置: 首页 > 知识库问答 >
问题:

github工作流:maven测试因缺少一些测试资源而失败,但在本地运行

盛城
2023-03-14

我花了几个小时来找出为什么我的一个junit测试在本地运行,而不是在github工作流上运行。失败的测试检查一些文件是否存在,以执行一些配置工作。我正在使用maven资源插件将这些文件复制到目标目录中的一个文件夹中。这是我的pom插件设置。xml:

<plugin>
    <!-- move some test resources to target -->
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-resource-one</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${basedir}/target/test-dir</outputDirectory>
                <resources>
                    <resource>
                        <directory>${basedir}/test-files</directory>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

文件按预期复制,mvn clean test按预期运行,但不在github工作流中运行。

这是我的工作流定义:

name: Sonar Scan
on:
  push:
    branches:
      - develop
      - feature*
      - master
  pull_request:
    types: [opened, synchronize, reopened]
jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - name: Checkout source
        uses: actions/checkout@v2
      - name: Set up JDK 11
        uses: actions/setup-java@v2.3.1
        with:
          distribution: 'adopt'
          java-version: '11'
      - name: Cache SonarCloud packages
        uses: actions/cache@v1
        with:
          path: ~/.sonar/cache
          key: ${{ runner.os }}-sonar
          restore-keys: ${{ runner.os }}-sonar
      - name: Build and analyze
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}  # Needed to get PR information, if any
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
        run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=abckey

我想这是一个典型的RTFM问题,但我没有发现任何东西。

有什么提示吗?

更新时间:

只是testet,mvn干净测试在github工作流程上也失败了!

共有1个答案

秦皓君
2023-03-14

如果将测试资源文件放置在src/test/resources/sub/dir中,则无需将其明确复制到target/dir中,默认情况下,Maven resources插件绑定到流程资源和流程测试资源阶段,因此无需在POM中进行任何声明:

资源插件处理将项目资源复制到输出目录的操作。有两种不同的资源:主资源和测试资源。区别在于,主资源是与主源代码关联的资源,而测试资源与测试源代码关联。

因此,这允许分离主要源代码及其单元测试的资源。

这并不是你的问题的原因,但无论如何,我会从POM中删除声明。

 类似资料:
  • 我正在尝试运行我的repo上列出的基本maven java操作:https://github.com/dhowe/rita2/ mvn-B包——文件pom。xmlcmd在本地repo中正确运行,但测试在github操作中失败,并出现以下错误(此处有完整日志): 因此,很明显,通过github操作运行时找不到字典资源。但是为什么maven会在本地找到文件(src/main/java/rita\u d

  • 我在使用JUnit5进行maven测试时遇到了一个奇怪的问题。 我用junit工具为每个方法创建了测试套件,每个测试都是这样开始的。 和要测试的类

  • 在工作中,我们为其中一个应用程序提供了一个自动化套件,该套件将在每次提交到master/deploy到prod时运行,很长一段时间以来,我们一直在努力使其足够可靠。 测试在Jenkins中运行,使用Selenium webDriverChromexvfb作为显示服务器。我们知道测试是有效的,因为如果我们在笔记本电脑上本地运行它们(我和两个朋友尝试过),它们每次都运行完美,但在詹金斯几乎每次都失败。

  • 在使用Oracle DB和JDK 17升级到Spring Boot 2.5.7时,我在Maven上运行测试时出现了这个奇怪的错误。 错误是:[ERROR]无法执行目标org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test(default-test)on project kkd: Exection default-test of目标org

  • 问题内容: 我有一个包含多个模块的项目。当所有测试通过时,Maven测试将全部运行。 当第一个模块中的测试失败时,maven将不会继续进行下一个项目。我在Surefire设置中将testFailureIgnore设置为true,但这无济于事。 我如何使Maven运行所有测试? 问题答案: 我刚刚找到了“ -fae”参数,该参数使Maven运行所有测试并且不会因失败而停止。

  • 恐怕我是个新手,有一些新手问题。 一段时间以来,我一直将python用于简单的脚本和自动化,但我正在挑战自己,通过为GitHub上的一些开源项目做出贡献来深入研究。 在这样一个公共环境中犯愚蠢的错误很有趣,但也很伤脑筋。 有时我的一项更改会导致错误,该错误会被提交PR时GitHub项目运行的自动测试之一捕获。如果可能,我想在提交PR之前自己捕获这些。有没有办法让我在自己的机器上本地运行相同的构建测