我尝试使用JUnit 5和Spring Boot在Kotlin项目中测试某些东西,但无法在测试类中注入bean。
我尝试了许多不同的注释,但是注射神经工作了...
这是我的考试班:
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@SpringBootTest
@ExtendWith(SpringExtension::class)
class FooTest {
@Autowired
lateinit var repo: BarRepository
@BeforeAll
fun setup() {
}
@Test
fun testToto() {
}
}
使用此注释组合,代码将引发以下异常:
java.lang.NoClassDefFoundError:org/springframework/boot/context/properties/source/ConfigurationPropertySource
。
而且我实际上无法找到此异常的来源...我试图对此异常进行一些研究,但没有发现任何令人满意的结果...
答案 0 :(得分:0)
我想您的依赖项有误。如果您从https://start.spring.io/#!language=kotlin生成一个新的Spring Boot Kotlin项目,然后按以下方式自定义依赖项,它将按预期工作:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>junit</artifactId>
<groupId>junit</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
还请注意,由于@ExtendWith(SpringExtension::class)
已经从Spring Boot 2.1开始使用此注释进行了元注释,因此您无需指定@SpringBootTest
。
答案 1 :(得分:0)
我终于找到了解决问题的方法。我的Spring Boot版本最初是“ 1.5.3”,因此我将pom.xml更改为“ 2.0.2”版本。现在我的测试运行正常,并且按预期正确注入了我的bean。这是我pom.xml的修改部分:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/>
</parent>
修改版本后一切都很好。 这是可以使用Junit测试的有用依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>junit</artifactId>
<groupId>junit</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>