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

Testing 无法从Gradle中的替代测试源集访问Kotlin内部成员,testing,gradle,kotlin,integration-testing,visibility,Testing,Gradle,Kotlin,Integration Testing,Visibility,下面我们将尝试将集成测试与普通单元测试分开 我们的问题是Kotlin中的内部成员无法通过此类测试访问。根据,测试源集存在可见性异常 “内部可见性”修改器表示成员可见 在同一模块内。更具体地说,模块是一组Kotlin 一起编译的文件: 智能思维模块 Maven项目 Gradle源集(测试源集可以访问main的内部声明除外) 通过一次Ant任务调用编译的一组文件 除了不尝试访问它们之外,还有其他解决方法吗?这将需要对数百个测试进行重大重构,并可能对整个代码库进行重构。通过将以下代码添加到我的自定义G

下面我们将尝试将集成测试与普通单元测试分开

我们的问题是Kotlin中的
内部
成员无法通过此类测试访问。根据,测试源集存在可见性异常

“内部可见性”修改器表示成员可见 在同一模块内。更具体地说,模块是一组Kotlin 一起编译的文件:

  • 智能思维模块
  • Maven项目
  • Gradle源集(测试源集可以访问main的内部声明除外)
  • 通过一次Ant任务调用编译的一组文件

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

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

    NamedDomainObjectContainer<KotlinWithJavaCompilation<KotlinJvmOptions>> compilations = project
      .getExtensions()
      .getByType(KotlinJvmProjectExtension.class)
      .target.getCompilations();
    
    compilations.getByName(sourceSet.getName())
      .associateWith(compilations.getByName(SourceSet.MAIN_SOURCE_SET_NAME));
    
    NamedDomainObjectContainer编译=项目
    .getExtensions()
    .getByType(KotlinJvmProjectExtension.class)
    .target.getCompilations();
    编译.getByName(sourceSet.getName())
    .associateWith(compilations.getByName(SourceSet.MAIN_SOURCE_SET_NAME));
    
    我查看了kotlin gradle插件的源代码,发现如下内容:


    通过更改,自定义源集中的测试运行良好,但IntellIJ仍显示编译错误。我将进一步查看是否可以使IntelliJ高兴

    这是一个有用的指针,但我无法在Groovy DSL中将其转换为任何内容(尽管我也在尝试混合使用MPP):
    kotlin{…targets.jvm.compilations.test.associateWith targets.jvm.compilations.main}
    。似乎
    associateWith
    未向用户公开。在MPP中,我认为您需要添加对
    compileMain
    kotlin源集的依赖项。有多个对
    compileMain
    compileTest
    源代码集的引用。例如,这个答案谈到了让想法快乐:这讨论了一些失败的尝试。你有没有找到解决问题的办法?