springboottest不加载应用程序上下文,只是挂起而没有错误

qc6wkl3g  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(235)

我有一个非常基本的集成测试,这是从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>

如果我运行 mainEventConsumerApp ,应用程序运行得非常好。
这个 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 无法自动加载上下文。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题