私はgradle 3.5ビルドシステムを使用し、Javaプロジェクトに複数のユニットテストと統合テストを行います。ソースファイル(sourceSets
)を変更すると、gradleのコンパイル回避とインクリメンタルコンパイルでは、関連するソースファイルのみがコンパイルされ、巨大な時間節約になります。ただし、すべてsourceSet
で行われたすべての変更に対してテストが実行されます。グラデーションは、すべてではなくユニットテストの関連するサブセットのみを識別して実行できますか?そうでない場合は、これを達成する方法がありますか?Gradleを使用してソースファイルが変更されたときにユニットテストのサブセットを実行する
6
A
答えて
0
はい、Gradleはこれを実行できますが、AFAIKはそのままでは使用できません。
タスクがIncremental Taskとして実装されている場合、どのファイルが変更されたかをGradleタスクが知ることができます。 Gradleのテストタスクは増分ではありません。幸いにも、それはそれを拡張することで、1にそれを回すのは簡単です:
class TestWatcher extends Test {
@TaskAction
void executeTests(IncrementalTaskInputs inputs) {
if (inputs.incremental) {
def outputDir = this.project.sourceSets['test'].output.classesDir.absolutePath
this.filter.includePatterns = []
inputs.outOfDate { InputFileDetails change ->
def candidate = change.file.absolutePath
if (candidate.endsWith('.class')) {
candidate = candidate
.replace('.class', '')
.replace(outputDir, '')
.substring(1)
.replace(File.separator, '.')
this.filter.includePatterns += candidate
}
}
}
super.executeTests()
}
}
このタスクは、増分である(mainメソッドは、引数としてIncrementalTaskInputs
かかります)。入力がインクリメンタルでない場合は、単に元のタスクを実行します。入力が増分の場合、変更を繰り返し、すべてのクラスを含めるようにincludePatterns
を設定します。これにより、変更されたテストのみが実行されます。
あなたのbuild.gradle
でこのタスクを使用することができます。
task testWatcher(type: TestWatcher) {
}
これは、デフォルトのテストタスク構成のすべてを受け入れます。スクリプトまたはbuildSrc
フォルダの下にタスクコードを直接配置することができます。
詳細については、this articleと書いてあります。コードを変更するたびに、変更されたテストのみを再実行するための継続ビルドサポートでこれを使用する方法を示します。記事のコードはGitHub repoにあります。ここでは、上記のコードも含まれています。
関連する問題
- 1. ユニットテストを実行しても変更が反映されない
- 2. ソースファイルが変更されたときにsconsビルドを更新する方法
- 3. モジュールがインストールされたローカルで変更されたPythonモジュールに対してユニットテストを実行する
- 4. Gradleを使用して分類されたJunitテストを実行するには?
- 5. Symfony2:ソースファイルが変更されたバンドルを更新するには?
- 6. 変更されたejabberdソースファイルをコンパイルして使用する方法
- 7. 実行時にオブジェクトのプロパティが変更されたときに、Seleniumを使用してEmber.jsアプリケーションを自動化
- 8. ユニットテストを実行するときにカスタムhtmlを使用する
- 9. Gradle: "gradle"が実行されたフォルダを取得する
- 10. UIButtonの状態が変更されたときにアクションを実行します。
- 11. UIViewフレームのサイズが変更されたときにメソッドを実行します。
- 12. ソースファイルを削除した後にデータグリッドが変更されない
- 13. textctrlが変更されたときにwxpythonが実行される
- 14. 人形を使って変更されたソースファイルをインストールするには?
- 15. Play FrameworkとGradleを使用してSpring cintextを実行する
- 16. 数式が変更されたときにプライベートサブを実行します。
- 17. 属性プロパティが変更されたときにsetterを実行します。
- 18. WPF ComboBoxが変更されたときにコマンドを実行します。
- 19. Javaソースファイルを変更してeclipseで保存すると、tomcatサーバーが実行されているときに、TomcatはWebアプリケーションをリロードして、Javaソースファイルを変更した後にTomcatコンテキストリロードを
- 20. Androidが変数を変更したときにコードを実行
- 21. TCLで変数が変更されたときに特定のアクションを実行
- 22. Excelシートが変更されたときにアクションを実行する - Office.js
- 23. ファイルが変更されたときにClojure REPLコマンドを実行する
- 24. txtファイルが変更されたときにpythonスクリプトを実行する
- 25. queryParamsが変更されたときにリゾルバを再実行する方法
- 26. wafを使用して実行時に生成されたC++ソースファイルをコンパイルするには?
- 27. ソースファイルが変更されたときに角張ったアプリケーションが更新されない
- 28. ソースファイルを変更したときにadd_custom_commandを使用してファイルを再生成できません
- 29. 変更されたソースファイルの単体テストを実行するにはどうすればよいですか?
- 30. MySqli prepared statmentはステートメントを実行するときに更新された変数値を使用しません
フォーラムのこの私の質問も参照してください。返信がない場合は、この作業を開始できます... https://discuss.gradle.org/t/incremental-testing-support/24785 –