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>
修改说明
- 添加
<testSourceDirectory>test-folder</testSourceDirectory>:明确告诉Maven测试Java文件的位置,让编译器能找到并编译测试类 - 保留
testResources的exclude规则:确保Maven仅将非Java文件(如Karate的.feature测试用例)作为测试资源打包,避免和编译后的class文件冲突
修改完成后,执行mvn test即可正常编译并运行测试用例。
内容的提问来源于stack exchange,提问作者prag-sri
相关产品推荐
相关产品推荐

