Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Gradle-如何从不同的Gradle项目运行测试,并且仍然获得覆盖率数据_Java_Gradle - Fatal编程技术网

Java Gradle-如何从不同的Gradle项目运行测试,并且仍然获得覆盖率数据

Java Gradle-如何从不同的Gradle项目运行测试,并且仍然获得覆盖率数据,java,gradle,Java,Gradle,是否有人知道如何从不同的gradle项目运行测试,并且仍然可以获得emma coverage报告数据? 以下是我当前的布局: Root/ settings.gradle (no explicit build.gradle - just defines all subprojects) SubProjectA/ build.gradle src/ (all real source is here) SubProjectATest/ build.gradle

是否有人知道如何从不同的gradle项目运行测试,并且仍然可以获得emma coverage报告数据?

以下是我当前的布局:

Root/
  settings.gradle (no explicit build.gradle - just defines all subprojects)
  SubProjectA/
    build.gradle
    src/ (all real source is here)
  SubProjectATest/
    build.gradle
    src/ (all testing code is here)
  SubProjectB/ (similar structure as A)
  SubProjectBTest/ (similar structure as ATest)
我目前正在使用emma插件,我想构建SubProjectA并从SubProjectA的build.gradle中运行SubprojectTest中的所有测试

下面是我在子项目的build.gradle中尝试过的一些东西

  • testCompile项目(':SubProjectATest').sourceset.test.classes
    (),但我遇到一个错误“
    在项目上找不到属性“sourceset”
  • 只是简单的
    testCompile项目(':subprojectast')
    ,但是我得到了“
    .SubProjectA/build/classes/test”,找不到“
    ”,还有“跳过任务”
    :SubProjectA:compileTestJava”,因为它没有源文件。
  • 只需添加如下所示的源集:

    试验{ 爪哇{ srcDir'../SubProjectATest/src' } }

  • 在中添加源集(选项3)是唯一有效的选项,但这样做似乎有些草率。有人知道如何使用项目依赖关系来实现这一点吗

    更新#1
    我还尝试了下面的一个答案来使用test.dependsOn,测试确实在运行,但emma插件报告了以下内容:
    build/classes/test',未找到
    1。二,。只需将类添加到测试编译类路径。这对将要执行的测试没有任何影响

    三,。是错误的方法,因为不应将源从项目X添加到项目Y

    如果您想要的是
    gradle:SubProjectA:test
    也执行
    :subprojectest:test
    ,则只需添加任务依赖项:

    子项目a/build.gradle:

    test.dependsOn(":subProjectATest:test")
    

    顺便问一下,您将测试放在单独项目中的动机是什么?

    动机?好问题。我使用CodePro Analytix在一些基本DTO(仅getter和setter)上生成一些测试,这会自动将它们放入一个新的测试项目中。这对我来说很好,因为它是由代码生成的。这在Java中是非标准的吗?我无论如何都不是Java专家。我也是gradle和groovy的新手。不过,这在CMake项目中是相当标准的。“test.dependsOn”注意:添加test.dependsOn很好,因为测试确实执行,但是emma仍然找不到build/classes/test,因此没有报告代码覆盖率结果。谢谢你调查这件事!我会澄清一下我的问题。你是否将Emma插件应用于SubprojectTest项目?如果你从不直接与SubProjectTest交互(但总是通过SubProjectA),这表明它不应该是它自己的Gradle项目。您只需将生成的源添加到子项目的测试源集中(无论它们实际位于何处),或向子项目添加其他源集(例如“generatedTests”)和测试任务。谢谢!这对彼得很有帮助。我将把它作为一个源集保存!