2

Javaプロジェクトを構築するかなり標準的なGradleビルドがあります。

初めて実行すると、すべてがコンパイルされ、テストが実行されます。ファイルを変更せずにもう一度実行すると、テストが再度実行されます。

このスレッドによると、Gradle はデフォルトで怠惰であり、何も変更されていない場合はテストを実行する必要はありません。ここでのデフォルトの動作は変更されましたか?

編集:

繰り返し実行するgradle testと、テストは初回のみ実行され、その後はスキップされます。ただし、gradle build繰り返し実行すると、他のすべてのタスクが最新としてマークされていても、テストは毎回再実行されます。

4

3 に答える 3

2

gradle uptodateチェックは、タスクが最新であると見なされない理由を情報レベルで記録します。「gradlebuild-i」を再実行して、ログ出力を確認するときに情報ログを使用して実行してください。

乾杯、ルネ

于 2012-09-28T12:19:52.523 に答える
2

わかりました。ルネが「-i」の出力を見るように促してくれたおかげで、答えが得られました...

実際には 2 つのテスト タスクがあります。Java プラグインの「テスト」タスクと、独自の「integrationTest」タスクです。関連性がないと思ったので、質問ではこれについて言及しませんでした。

これらのタスクは出力 (レポートなど) を同じディレクトリに書き込んでいることが判明したため、Gradle のタスクベースの入力および出力追跡は、何かが変更されたと考え、テストを再実行していました。

したがって、次の質問 (個別に質問します) は、テスト タスクの 2 つのインスタンスを完全に (最小限の Groovy/Gradle コードで) 完全に分離するにはどうすればよいかということになります。

于 2012-10-01T13:36:33.267 に答える
0

build.gradle でテスト タスクを作成し、それらの特定のタスクを呼び出して、特定の一連のテストを実行する必要があります。クラスが 2 回実行されないようにクラスを除外する例を次に示します (スイートを実行してから、その子クラスを個別に再実行する場合など)。

tasks.withType(Test) {
    jvmArgs '-Xms128m', '-Xmx1024m', '-XX:MaxPermSize=128m'
    maxParallelForks = 4  // this runs tests parallel if more than one class
    testLogging {
        exceptionFormat "full"
        events "started", "passed", "skipped", "failed", "standardOut", "standardError"
        displayGranularity = 0
    }   
}
task runAllTests(type: Test) {
    include '**/AllTests.class'
    testReportDir = file("${reporting.baseDir}/AllTests")
    testResultsDir = file("${buildDir}/test-results/AllTests")
}
task runSkipSuite(type: Test) {
    include '**/Test*.class'
    testReportDir = file("${reporting.baseDir}/Tests")
    testResultsDir = file("${buildDir}/test-results/Tests")
}

また、ビルドの質問について。「ビルド」タスクには、ビルド ディレクトリからテストをクリーンアップするクリーン ステップが含まれます。それ以外の場合、実行はテストが既に実行されていると見なします。

于 2013-02-26T15:55:49.820 に答える