我有一个非常基本的集成测试,这是从spring初始化器初始化基于spring的应用程序时的默认测试。
import org.junit.jupiter.api.Test
import org.springframework.boot.test.context.SpringBootTest
@SpringBootTest
class EventConsumerApplicationTests {
@Test
fun contextLoads() {
}
}
当我从intellij运行它时,日志只显示以下内容。
> Task :compileKotlin UP-TO-DATE
> Task :compileJava NO-SOURCE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :compileTestKotlin UP-TO-DATE
> Task :compileTestJava NO-SOURCE
> Task :processTestResources
> Task :testClasses
> Task :test
它将永远这样。没有例外。
我的主要应用程序类如下所示。
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class EventConsumerApp
fun main(args: Array<String>) {
runApplication<EventConsumerApp>(*args)
}
我有一个配置类。
import com.something.eventconsumer.service.EventService
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import org.joda.time.DateTime
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@Configuration
class EventConsumer(private val eventService: EventService) {
@Bean
fun consumer() {
return runBlocking {
launch {
createCoroutine()
}
}
}
// other functions...
}
以及 EventService
是这样的。
import org.springframework.stereotype.Service
import com.something.eventconsumer.repository.EventRepo
@Service
class EventService(
private val eventRepo: EventRepo
) {
suspend fun persist(event: Event) {
// some code
}
// some other codes...
}
以及 EventRepo
.
import org.springframework.data.annotation.Id
import org.springframework.data.relational.core.mapping.Table
import org.springframework.data.repository.kotlin.CoroutineCrudRepository
import java.math.BigDecimal
import java.time.LocalDateTime
@Table
data class Event(
@Id val id: Long = 0,
val eventId: String,
val reference: String,
val baseAmount: BigDecimal,
val valueDate: LocalDateTime? = null,
)
interface EventRepo : CoroutineCrudRepository<Event, Long>
如果我运行 main
在 EventConsumerApp
,应用程序运行得非常好。
这个 build.gradle.kts
是这样的(只包括相关的)。
plugins {
id("org.springframework.boot") version "2.4.4"
id("io.spring.dependency-management") version "1.0.11.RELEASE"
kotlin("jvm") version "1.4.31"
kotlin("plugin.spring") version "1.4.31"
}
java.sourceCompatibility = JavaVersion.VERSION_11
dependencies {
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactive")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
implementation("org.springframework.boot:spring-boot-starter-data-r2dbc")
implementation("io.r2dbc:r2dbc-postgresql")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.withType<Test> {
useJUnitPlatform()
}
我试着在spring启动测试中手动指定类。
import org.junit.jupiter.api.Test
import org.springframework.boot.test.context.SpringBootTest
@SpringBootTest(classes = [EventConsumer::class])
class EventConsumerApplicationTests {
然后,我得到了一个例外。
EventConsumerApplicationTests > contextLoads() FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:132
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:800
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException at DefaultListableBeanFactory.java:1790
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.something.eventconsumer.service.EventService' available
有人能给我指一下正确的方向吗?我以前从没遇到过这个问题 SpringBootTest
无法自动加载上下文。
暂无答案!
目前还没有任何答案,快来回答吧!