当前位置: 首页 > 知识库问答 >
问题:

静态编程语言内部成员无法从Gradle中的替代测试源集访问

仰成天
2023-03-14

下列的https://docs.gradle.org/current/userguide/java_testing.html#sec:configuring_java_integration_tests和https://www.michael-bull.com/blog/2016/06/04/separating-integration-and-unit-tests-with-gradle我们正试图将集成测试与普通单元测试分开。

我们遇到的问题是静态编程语言中的内部成员无法从这样的测试中访问。根据静态编程语言doco,测试源集存在可见性异常。

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

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

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

共有1个答案

都博裕
2023-03-14

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

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

compilations.getByName(sourceSet.getName())
  .associateWith(compilations.getByName(SourceSet.MAIN_SOURCE_SET_NAME));

我查看了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开心

 类似资料:
  • 我正在开发用静态编程语言实现的Spring Boot应用程序,并想迁移Gradle构建以使用Gradle静态编程语言DSL。 我无法弄清楚的一件事是如何为我的集成测试设置单独的源代码集和任务。 我的源代码树看起来像这样: 而源集和任务是这样用Gradle的Groovy DSL设置的: 我发现了许多使用Gradle Kotlin DSL的例子,以及其他源集的例子——但是没有关于组合的例子。 有人能帮

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 考虑以下代码,我们获取列表的块,加入它们并打印到标准输出: 代码工作正常。我想更改lambda调用(

  • 到目前为止,我一直在使用这个静态编程语言密封类: 这在我的Kotlin和Java代码中都非常有效。今天我尝试将这个类改为使用对象(建议减少额外的类实例化): 我可以在我的其他静态编程语言文件中引用这个简单的版本,但是我现在正在努力在我的Java文件中使用它。 当我尝试在Java中引用时,我尝试了以下两种回弹编译错误: 有人知道我现在如何在Java中引用该实例吗?

  • 我正在尝试用Java编写下面用Kotlin编写的代码。我无法创建DefaultElementsAdapter,因为我无法获得正确的语法。 我无法获得正确的Java代码 Kotlin班是这样的 我正在尝试使用图书馆https://github.com/m7mdra/HtmlRecycler

  • 在Java中,程序员可以为JUnit测试用例指定预期的异常,如下所示: 在科特林我该怎么做?我尝试了两种语法变体,但都不起作用: