You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Karate项目替换测试目录后无测试用例执行问题求助

问题

我是Karate新手,将项目中src/test/java目录移除,所有文件及文件夹迁移至test-folder后,测试用例无法执行,控制台提示No sources to compile但构建状态显示Build Success。已修改pom.xml中的测试目录配置,问题仍未解决,当前pom.xml代码如下:

<groupId>com.mycompany</groupId>
<artifactId>KarateProject</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>11</java.version>
    <maven.compiler.version>3.6.0</maven.compiler.version>
    <karate.version>1.3.1</karate.version>
    <gatling.plugin.version>4.2.9</gatling.plugin.version>
</properties>
<dependencies>
    <dependency>
        <groupId>com.intuit.karate</groupId>
        <artifactId>karate-junit5</artifactId>
        <version>${karate.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.github.javafaker</groupId>
        <artifactId>javafaker</artifactId>
        <version>1.0.2</version>
    </dependency>
    <dependency>
        <groupId>net.masterthought</groupId>
        <artifactId>cucumber-reporting</artifactId>
        <version>5.3.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.intuit.karate</groupId>
        <artifactId>karate-gatling</artifactId>
        <version>${karate.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.6.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.2.6.RELEASE</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <testResources>
        <testResource>
            <directory>test-folder</directory>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </testResource>
    </testResources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.version}</version>
            <configuration>
                <encoding>UTF-8</encoding>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <compilerArgument>-Werror</compilerArgument>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
            <configuration>
                <systemProperties>
                    <karate.options>--tags ~@ignore</karate.options>
                </systemProperties>
            </configuration>
        </plugin>
        <plugin>
            <groupId>io.gatling</groupId>
            <artifactId>gatling-maven-plugin</artifactId>
            <version>${gatling.plugin.version}</version>
            <configuration>
                <simulationsFolder>test-folder/conduit/performance</simulationsFolder>
                <configFolder>test-folder/conduit/performance/data</configFolder>
            </configuration>
        </plugin>
        <plugin>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>scala-maven-plugin</artifactId>
            <version>4.5.6</version>
            <executions>
                <execution>
                    <goals>
                        <goal>testCompile</goal>
                    </goals>
                    <configuration>
                        <args>
                            <arg>-Jbackend:GenBCode</arg>
                            <arg>-Jdelambdafy:method</arg>
                            <arg>-target:jvm-1.8</arg>
                            <arg>-deprecation</arg>
                            <arg>-feature</arg>
                            <arg>-unchecked</arg>
                            <arg>-language:implicitConversions</arg>
                            <arg>-language:postfixOps</arg>
                        </args>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
解决方案

核心问题是仅配置了测试资源目录,但未指定测试Java源码的编译目录。Maven默认读取src/test/java下的测试类,迁移目录后未更新该配置,导致编译器找不到需要编译的测试代码,因此出现No sources to compile提示。

需要对pom.xml的build节点做以下修改:

<build>
    <!-- 指定测试Java源码目录 -->
    <testSourceDirectory>test-folder</testSourceDirectory>
    <testResources>
        <testResource>
            <directory>test-folder</directory>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </testResource>
    </testResources>
    <!-- 其余插件配置保持不变 -->
    <plugins>
        <!-- ... 原有插件代码 ... -->
    </plugins>
</build>

修改说明

  1. 添加<testSourceDirectory>test-folder</testSourceDirectory>:明确告诉Maven测试Java文件的位置,让编译器能找到并编译测试类
  2. 保留testResources的exclude规则:确保Maven仅将非Java文件(如Karate的.feature测试用例)作为测试资源打包,避免和编译后的class文件冲突

修改完成后,执行mvn test即可正常编译并运行测试用例。

内容的提问来源于stack exchange,提问作者prag-sri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:43:27