【问题标题】:IntelliJ displays error message when unit test is written in Kotlin在 Kotlin 中编写单元测试时 IntelliJ 显示错误消息
【发布时间】:2020-04-20 11:33:12
【问题描述】:

上下文

我有一个具有以下特点的项目

  • IntelliJ Ultimate 2020.1
  • Java 13(带有 module-info.java)
  • Kotlin 1.3.72
  • JUnit(+ 真相)
  • maven(我认为这并不重要)

代码库是混合的,有些类是使用纯 Java 编写的,有些是使用 Kotlin 编写的,测试也是如此。一切都按预期工作,即

  • 所有代码均按正确顺序编译,并且可在 Kotlin 和 Java 之间完全互操作
  • 所有测试都可以使用mvn test 或 IntelliJ “运行测试”来执行
  • 可以运行生成的 jar(为了提供上下文)

但是……

除了一切正常之外,IntelliJ 警告我关于未声明的模块依赖仅当测试类是用 Kotlin 编写的.对于用纯 Java 编写的测试类,此警告不显示

警告: 错误:(9, 6) 符号在模块 'org.junit.jupiter.api' 中声明,当前模块不依赖

该警告通常允许导入/需要相应的模块/依赖项,但[alt]+[enter] 对话框中没有提供解决方案。

到目前为止我尝试过的事情:

  • 从 JUnit 4 升级到 5 并没有改变这种情况
  • 谷歌搜索无济于事:(
  • 通过使测试失败来确保在运行 mvn test 时真正执行用 Kotlin 编写的测试
  • 使用 IntelliJ 手动运行测试“运行测试”
  • 在 Kotlin 之间来回转换测试
  • 明确要求模块信息中的 JUnit API / 真实性

后者显然可以防止警告但不是解决方案,因为这实际上会产生硬依赖。根据我在谷歌搜索时发现的内容,maven-surefire-plugin 确保包含测试依赖项。另外:运行mvn test 就像上面所说的魅力一样,所以这似乎不是问题的一部分。

在写测试的时候看到所有的红线真的很讨厌......

可疑行为

相同的测试,但在 java - 一切都很好

问题:

如何解决 IntelliJ 中 Kotlin 测试类的警告?

注意

  1. 我开始相信这是 IntelliJ 中的一个错误,但我很乐意看到我忽略的内容。

  2. 由于从编译到使用 Maven 运行的一切工作都像一个魅力,我排除了有关项目结构等的细节。手头的问题是关于 IntelliJ 中的警告,而不是关于构建损坏或非功能性 jar 的问题。我很乐意添加这些以防万一它们变得有必要。

  3. 而且由于一切都有效(除了烦人的警告),我真的不知道在哪里继续研究,因此提出了一个问题。

【问题讨论】:

    标签: unit-testing kotlin intellij-idea


    【解决方案1】:

    这是 IDEA Kotlin 插件错误高亮中的一个错误:https://youtrack.jetbrains.com/issue/KT-26037

    解决方法:将@file:Suppress("JAVA_MODULE_DOES_NOT_DEPEND_ON_MODULE") 添加到包声明之前的测试文件中。

    【讨论】:

    • 谢谢,抑制警告有效,幸运的是没有缺点。为了帮助修复错误,我可以提供什么更具体的信息吗?
    • 谢谢,无需提供更多信息,该错误是可重现的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多