Kotlin内部成员无法从Gradle中设置的替代测试源访问

Kou*_*lik 5 testing integration-testing visibility gradle kotlin

遵循https://docs.gradle.org/current/userguide/java_testing.html#sec:configuring_java_integration_testshttps://www.michael-bull.com/blog/2016/06/04/separating-integration-and-unit -tests-with-gradle,我们尝试将集成测试与普通单元测试分开。

我们internal遇到的问题是,此类测试无法访问Kotlin的成员。根据Kotlin doco,测试源集存在可见性例外。

内部可见性修饰符意味着该成员在同一模块中可见。更具体地说,模块是一起编译的一组Kotlin文件:

  1. IntelliJ IDEA模块;
  2. 一个Maven项目;
  3. Gradle源集(测试源集可以访问main的内部声明除外);
  4. 通过调用Ant任务编译的一组文件。

除了不尝试访问它们之外,还有其他解决方法吗?这将需要对数百个测试进行重大重构,并有可能对整个代码库进行重构。

gai*_*zov 4

internal通过将以下代码添加到我的自定义 Gradle 插件中,我能够获得自定义测试源集来访问类。

NamedDomainObjectContainer<KotlinWithJavaCompilation<KotlinJvmOptions>> compilations = project
  .getExtensions()
  .getByType(KotlinJvmProjectExtension.class)
  .target.getCompilations();

compilations.getByName(sourceSet.getName())
  .associateWith(compilations.getByName(SourceSet.MAIN_SOURCE_SET_NAME));
Run Code Online (Sandbox Code Playgroud)

我查看了kotlin-gradle-plugin源代码,发现以下内容: https://github.com/JetBrains/kotlin/blob/v1.3.61/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin /gradle/plugin/KotlinPlugin.kt#L488-L490

经过更改,我的自定义源集中的测试运行得很好,但 IntellIJ 仍然显示编译错误。我会进一步看看我是否也能让 IntelliJ 满意