【问题标题】:Kotlin. Micronaut. TestNG test fails in IDEA but pass via gradle科特林。微航海。 TestNG 测试在 IDEA 中失败,但通过 gradle 通过
【发布时间】:2018-06-01 11:30:29
【问题描述】:

我创建了基于this 指令的简单 testNG 测试示例 micronaut 项目。

当我从命令行通过 gradle 运行它时,测试运行良好,但当我尝试从 IDEA 运行它时失败。

为了在日志中成功运行 gradle,我看到了我的控制器的路由:

    13:40:44.314 [Test worker] DEBUG i.m.web.router.DefaultRouteBuilder - Created Route: GET /hello -> HelloController#String index() (application/json )

IDEA 运行时缺少的。

问题:我需要配置什么才能使测试在 IDEA 中也通过?

来源

src/main/kotlin/example/micronaut/Application.kt:

package example.micronaut

import io.micronaut.runtime.Micronaut

object Application {

    @JvmStatic
    fun main(args: Array<String>) {
        Micronaut.build()
                .packages("example.micronaut")
                .mainClass(Application.javaClass)
                .start()
    }
}

src/main/kotlin/example/micronaut/HelloController.kt:

package example.micronaut

import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get

@Controller("/hello")
class HelloController {

    @Get("/")
    fun index(): String {
        return "Hello World"
    }
}

src/test/kotlin/example/micronaut/HelloTest.kt:

package example.micronaut

import io.micronaut.context.ApplicationContext
import io.micronaut.http.client.HttpClient
import io.micronaut.runtime.server.EmbeddedServer
import org.testng.annotations.AfterMethod
import org.testng.annotations.BeforeMethod
import org.testng.annotations.Test

class HelloTest {

    lateinit var embeddedServer: EmbeddedServer
    lateinit var client: HttpClient

    @BeforeMethod
    fun init() {
        embeddedServer = ApplicationContext.run(EmbeddedServer::class.java)
        client = HttpClient.create(embeddedServer.url)
    }

    @Test
    fun check() {
        val response: String = client.toBlocking().retrieve("/hello")
        assert(response == "Hello World")
    }

    @AfterMethod
    fun cleanup() {
        client.close()
        embeddedServer.close()
    }

}

build.gradle:

buildscript {
    repositories {
        mavenCentral()
        maven { url "https://plugins.gradle.org/m2/" }
    }
    dependencies {
        classpath "com.github.jengelman.gradle.plugins:shadow:2.0.4"
        classpath "io.spring.gradle:dependency-management-plugin:1.0.5.RELEASE"
        classpath "net.ltgt.gradle:gradle-apt-plugin:0.15"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.31"
    }
}

version "0.1"
group "example"

apply plugin:"io.spring.dependency-management"
apply plugin:"com.github.johnrengelman.shadow"
apply plugin:"application"
apply plugin:"java"
apply plugin:"net.ltgt.apt-eclipse"
apply plugin:"net.ltgt.apt-idea"
apply plugin:"kotlin"
apply plugin:"kotlin-kapt"


repositories {
    mavenLocal()
    mavenCentral()
    maven { url "https://jcenter.bintray.com" }
}

dependencyManagement {
    imports {
        mavenBom 'io.micronaut:bom:1.0.0.M1'
    }
}

dependencies {
    annotationProcessor "io.micronaut:inject-java"
    compile "io.micronaut:http-client"
    compile "io.micronaut:http-server-netty"
    compile "io.micronaut:inject"
    compile "io.micronaut:runtime"
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.31"
    compile "org.jetbrains.kotlin:kotlin-reflect:1.2.31"
    compileOnly "io.micronaut:inject-java"
    kapt "io.micronaut:inject-java"
    runtime "ch.qos.logback:logback-classic:1.2.3"

    testCompile "io.micronaut:inject-java"

    testImplementation("org.testng:testng:6.13.1")
}

shadowJar {
    mergeServiceFiles()
}

mainClassName = "example.micronaut.Application"
compileJava.options.compilerArgs += '-parameters'
compileTestJava.options.compilerArgs += '-parameters'

test {
    useTestNG()
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

已解决

http://mrhaki.blogspot.com/2016/03/gradle-goodness-configure-intellij-idea.html 中所述,通过将 gradle 设置为测试运行程序来修复

【问题讨论】:

  • 我对此不确定,但有一个怀疑是,在未委托给 Gradle 的情况下从 IntelliJ 构建时,所需的 kapt 内容未参与。
  • @JeffScottBrown 你可能是对的。 kapt doc 说:“请注意,IntelliJ IDEA 自己的构建系统仍然不支持 kapt”。
  • 如果您在 IDE Gradle 设置中启用 Delegate to Gradle 并使用 Gradle runner 运行测试,它是否与命令行一样工作?
  • 是的,它有效,谢谢@Andrey
  • @ludenus 您是否在 IDEA 中收到了 Provider com.fasterxml.jackson.module.kotlin.KotlinModule not found 错误? kapt-stuff 并没有为我解决这个问题。

标签: intellij-idea kotlin testng micronaut


【解决方案1】:

目前需要一个构建工具来构建 Kotlin + Micronaut 应用程序,直到 IntelliJ 为 Kapt 带来原生支持。这在“Kotlin、Kapt 和 IntelliJ”部分中的 https://docs.micronaut.io/latest/guide/index.html#kotlin 进行了解释

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多