Я пытаюсь использовать микронавта из Котлина. У меня есть это:
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
. Когда я запускаю приложение, используя мой класс Application
, я вижу, что оно находит Controller
и делает маршрут доступным.
Это в значительной степени Hello World для Micronaut, я не уверен, что здесь происходит не так.