为什么我的 Micronaut Controller bean 在测试期间没有被处理
Why is my Micronaut Controller bean not handled during tests
我正在尝试使用 Kotlin 的 micronaut。我有这个:
package me.test
import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import io.micronaut.http.annotation.Produces
@Controller("/hello")
class Controller() {
@Get("/")
@Produces(MediaType.TEXT_PLAIN)
fun ping(): String {
return "hello world"
}
}
package me.test
import io.micronaut.runtime.Micronaut
object Application {
@JvmStatic
fun main(args: Array<String>) {
Micronaut.build()
.packages("me.test")
.mainClass(Application.javaClass)
.start()
}
}
我写了以下控制器测试:
package me.test
import io.micronaut.http.client.RxHttpClient
import io.micronaut.http.client.annotation.Client
import io.micronaut.test.annotation.MicronautTest
import org.junit.jupiter.api.Test
import javax.inject.Inject
@MicronautTest(application = Application::class)
class ControllerTest {
@Inject
@field:Client("/")
private lateinit var client: RxHttpClient
@Test
fun `should server ping with a pong`() {
val result = client.toBlocking().retrieve("/hello")
println(result)
}
}
但测试失败并显示 HttpClientResponseException: Page Not Found
。
我已经对此进行了调试,据我所知,在测试期间,在 DefaultBeanContext.getBeanDefinitions
中它没有为 @Controller
限定符找到任何 bean。当我使用 Application
class 启动应用程序时,我可以看到它找到了 Controller
并使路由可用。
这几乎就是 Micronaut 的 Hello World,我不确定这里出了什么问题。
我认为这纯粹是 IDE 相关。我将 Intellij 设置为使用注释处理器,将构建委托给 Gradle 并使用 Gradle 测试运行器。但是,您还需要删除任何现有的测试配置,然后问题就会消失。
我正在尝试使用 Kotlin 的 micronaut。我有这个:
package me.test
import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import io.micronaut.http.annotation.Produces
@Controller("/hello")
class Controller() {
@Get("/")
@Produces(MediaType.TEXT_PLAIN)
fun ping(): String {
return "hello world"
}
}
package me.test
import io.micronaut.runtime.Micronaut
object Application {
@JvmStatic
fun main(args: Array<String>) {
Micronaut.build()
.packages("me.test")
.mainClass(Application.javaClass)
.start()
}
}
我写了以下控制器测试:
package me.test
import io.micronaut.http.client.RxHttpClient
import io.micronaut.http.client.annotation.Client
import io.micronaut.test.annotation.MicronautTest
import org.junit.jupiter.api.Test
import javax.inject.Inject
@MicronautTest(application = Application::class)
class ControllerTest {
@Inject
@field:Client("/")
private lateinit var client: RxHttpClient
@Test
fun `should server ping with a pong`() {
val result = client.toBlocking().retrieve("/hello")
println(result)
}
}
但测试失败并显示 HttpClientResponseException: Page Not Found
。
我已经对此进行了调试,据我所知,在测试期间,在 DefaultBeanContext.getBeanDefinitions
中它没有为 @Controller
限定符找到任何 bean。当我使用 Application
class 启动应用程序时,我可以看到它找到了 Controller
并使路由可用。
这几乎就是 Micronaut 的 Hello World,我不确定这里出了什么问题。
我认为这纯粹是 IDE 相关。我将 Intellij 设置为使用注释处理器,将构建委托给 Gradle 并使用 Gradle 测试运行器。但是,您还需要删除任何现有的测试配置,然后问题就会消失。