2

Selenium/TestNGテストクラスのみを含むgradleプロジェクトがあります。これらは、デプロイされた戦争アプリケーションに対して実行されます。すべて正常に動作し、テストベースをクエリして特定のTestNGグループに属するテストのリストを出力するJavaユーティリティを追加しています。ユーザーはテスト実行前にテストベースにクエリを実行したい場合があるため、ユーティリティはメインプロジェクトとは別にコンパイルして実行する必要があります。

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とは別にコンパイルしたいディレクトリにあります。タスクはでソースをコンパイルすることになっており、タスクはソースフォルダでスキャナーユーティリティを実行します。src/main/javasrc/test/javabuildUtilsrc/test/java/utillistgroupssrc/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)
}

セットアップについて私が気づいたことの1つは、src/test/java/utilソースフォルダーがの下にネストされていることsrc/test/javaです。Gradleは、プロジェクトテストのデフォルトのフォルダーであると想定src/test/javaされるため、テストの実行時に、Gradleとそのすべての子が自動的に含まれます。ユーティリティフォルダをデフォルトの設定とは別にしたいので、src/testutil/java衝突を避けるために、に入れることをお勧めします。sourceSetsその場合は、上記の設定を正しいソースパスで更新することを忘れないでください。

于 2012-06-06T12:44:05.540 に答える
0

これをgradleで解決するには、utilクラスの特定のソースセットを作成し、testngグループを出力するためにこのクラスを実行するJavaExecタイプのタスクを追加することをお勧めします。次のスニペットをご覧ください。

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 に答える