使用 Spring Boot 应用程序运行空手道测试时出现以下错误
java.lang.NoSuchMethodError: 'io.github.classgraph.ClassGraph io.github.classgraph.ClassGraph.acceptPaths(java.lang.String[])'
添加了以下 Maven 空手道依赖项 -
<dependency>
<groupId>com.intuit.karate</groupId>
<artifactId>karate-core</artifactId>
<version>1.4.1</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.intuit.karate</groupId>
<artifactId>karate-junit5</artifactId>
<version>1.4.1</version>
<scope>test</scope>
</dependency>
使用以下代码添加了组件测试 -
import com.intuit.karate.junit5.Karate; import com.ril.rpos.auth.Application; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.springframework.boot.SpringApplication; import org.springframework.context.ConfigurableApplicationContext; public class ComponentTest { private static ConfigurableApplicationContext context; @BeforeAll public static void setUp() throws InterruptedException { //DB.INSTANCE.resetDB(); context = SpringApplication.run(Application.class); } @Karate.Test Karate runTests() { return new Karate().path("classpath:features/api/sampletests.feature"); } @AfterAll public static void tearDown() { if(context != null) { SpringApplication.exit(context, () -> 0); context.close(); } } }
空手道中的 Logback 被排除,因为它已经在类路径上并在启动 sprint 应用程序时抛出下面 -
java.lang.IllegalArgumentException:LoggerFactory 不是 Logback LoggerContext,但 Logback 位于类路径上。删除 Logback 或竞争的实现
这个问题的根本原因是什么?
尝试切换到“胖罐子”,看看是否有效果。请参阅“使用 Shaded JAR”部分此处。
<dependency>
<groupId>com.intuit.karate</groupId>
<artifactId>karate-core</artifactId>
<version>${karate.version}</version>
<classifier>all</classifier>
<scope>test</scope>
</dependency>