2

我有一个只包含 Selenium/TestNG 测试类的 gradle 项目。它们针对已部署的战争应用程序执行。一切正常,现在我添加了一个 java 实用程序,它将查询测试库并打印属于给定 TestNG 组的测试列表。该实用程序应与主项目分开编译和执行,因为用户可能希望在测试执行之前查询测试库。

我在 build.gradle 中添加了以下内容:

task listgroups(dependsOn:'buildUtil' ) <<{
    ant.java(classname: 'util.TestGroupScanner', fork: true,
            classpath: "src/test/java")
}

task buildUtil {
    compile {
        source = "src/test/java/util"
    }
}

但是,当调用 listgroups 任务时,我收到以下错误:

C:\console-bg1>g listgroups

FAILURE: Build failed with an exception.
(...)

* What went wrong:
A problem occurred evaluating root project 'console-bg1'.
> Could not find method compile() for arguments [build_4emu7duna2isgubc1k8uts8k9
8$_run_closure6_closure11@d210ab] on root project 'console-bg1'.

我不确定如何解决这个问题,不用说,到目前为止还没有在网上找到答案。任何指针表示赞赏。

4

2 回答 2

2

buildUtil正如错误所暗示的那样,问题出在任务中。buildUtil声明了一个compile闭包,但默认任务不存在这样的闭包。

让我试着澄清你的设置是什么。util.TestGroupScanner源代码位于src/test/java/util您希望与其他源代码分开编译的目录中(大概是and src/main/javasrc/test/java。该buildUtil任务应该在 中编译源src/test/java/util,并且该任务在源文件夹listgroups上执行扫描器实用程序。src/test/java

在这种情况下,我建议您为实用程序源声明一个新的源集,如下所示:

sourceSets {
  util {
    java {
       srcDir 'src/test/java/util'
    }
  }
}

这将自动创建一个compileUtilJava为您调用的编译任务,该任务将编译这些源代码。我还认为您在执行工具时需要在类路径中包含实用程序类,可以通过sourceSets.util.output.classesDir. 所以现在你的listgroups任务看起来像:

task listgroups(dependsOn: 'compileUtilJava' ) <<{
  ant.java(classname: 'util.TestGroupScanner', fork: true,
           classpath: "src/test/java:" + sourceSets.util.output.classesDir)
}

关于您的设置,我注意到的一件事是src/test/java/util源文件夹嵌套在src/test/java. Gradle 将假定src/test/java为您的项目测试的默认文件夹,因此会在运行测试时自动包含它及其所有子项。由于您希望将实用程序文件夹与默认设置分开,因此我建议您将其放入 中src/testutil/java,以避免任何冲突。如果这样做,请不要忘记sourceSets使用正确的源路径更新上面的设置。

于 2012-06-06T12:44:05.540 回答
0

为了用 gradle 解决这个问题,我建议为你的 util 类创建一个特定的源集,并添加一个 JavaExec 类型的任务来执行这个类来打印你的 testng 组。看看下面的代码片段:

apply plugin:'java'
...
...
configurations{
    testUtilCompile.extendsFrom testCompile 
}

...
...
sourceSets{
    testUtil{
        java {
            srcDir "src/test/java"
            include "util/**"
        }
    }
}

task printGroups(type:JavaExec){
    main = "util.TestGroupScanner"
    classpath = sourceSets.testUtil.runtimeClasspath
}

问候,勒内

于 2012-06-06T19:51:41.977 回答