主要来源中的 Gradle 测试

Posted

技术标签:

【中文标题】主要来源中的 Gradle 测试【英文标题】:Gradle Tests inside main sources 【发布时间】:2016-09-07 00:24:06 【问题描述】:

我正在编写 Web 服务以使用 Web 端点在 junit 上运行测试,因此我必须将所有测试保存在源代码中。 问题是我想直接从 IDEA 和命令行运行测试,最后我卡住了。

如何通过“gradle test”在源文件夹 (src/main/java) 中运行测试? 我对gradle不熟悉,但我尝试过使用

sourceSets 
    test 
        java.srcDir file('src/main/java')
        resources.srcDir file('src/main/resources')
    

但是它破坏了使用 IDEA 的项目导入,我的 2016.1.1 有时无法创建具有相同内容根目录的两个模块或预期将源标记为测试。

我可以通过自定义test 来解决这个问题,或者以某种方式将测试源加载到 SpringBoot 启动器中用于 Web 服务吗?

也许我可以扩展 gradle 测试任务并自定义它?

【问题讨论】:

你能再解释一下,为什么你需要在主源集src/main/java而不是在测试源集src/test/java中有测试源? @Nikem 所有这些测试都用于集成测试,应该能够由自托管服务运行。所有测试都是使用带有自定义扩展的 JUnit 编写的。例如testservice.application.com/run/class/NewFeatureTest 将运行NewFeatureTest.class,它会向production.application.com/api/ 等开发/生产环境发出一些请求,并对检索到的数据进行断言。而且我必须将NewFeatureTest.java 存储在主要来源中,以便从服务此测试服务中可见。 【参考方案1】:

尝试删除 file() 调用

sourceSets 
    test 
        java.srcDir 'src/main/java'
        resources.srcDir 'src/main/resources'
    

在 gradle 5.4.1 上测试过,但也可以在其他版本上运行

【讨论】:

【参考方案2】:

我想这篇文章可以帮助您了解如何在主要来源中开始测试:

How to run junit tests with gradle?.

我会在源代码中指定一个包含所有测试的子文件夹。 并且可以指定输出目录,与默认输出目录不同:

sourceSets 
    test 
        java.srcDir file('src/main/java/tests') // tests shall contain your tests
        resources.srcDir file('src/main/resources')
        output.resourcesDir = "build/classes/main"
    

【讨论】:

我看到了,并且已经尝试过这种方法。它有效,但正如我在问题中提到的那样,它破坏了从 gradle 导入 Intellij IDEA 项目。 修改了我的答案,希望不再无用。

以上是关于主要来源中的 Gradle 测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 gradle 进行 android 项目的 junit 测试

Android Gradle 1.1 - 添加对另一个项目测试的测试依赖项

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

Why Gradle?

从精准化测试看ASM在Android中的强势插入-Gradle插件

Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.1——单元测试