我使用gradle 3.5構建系統,並在Java項目中執行了多個單元測試和集成測試。當我在源文件(sourceSets
)中進行更改時,gradle的編譯避免和漸進式編譯確保只編譯相關的源文件,這是一個巨大的倍頻程序。但是,全部測試針對sourceSet
中進行的每個更改運行。 Gradle能否識別並運行單元測試的相關子集而不是全部?如果沒有,有沒有辦法做到這一點?當使用Gradle更改源文件時運行單元測試的子集
6
A
回答
0
是的,Gradle可以做到這一點,但AFAIK並非開箱即用。
如果任務實現爲Incremental Task,則Gradle任務可以確定哪些文件已更改。 Gradle中的測試任務不是增量式的。幸運的是這很容易通過擴展它把它變成一個:
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()
}
}
這個任務是增加(主要方法將IncrementalTaskInputs
作爲其參數)。如果輸入不是增量式的,它只是運行原始任務。如果輸入是增量式的,它會遍歷所做的更改並設置includePatterns
以包含所有類。然後這將只運行已更改的測試。
您可以在build.gradle
使用此任務:
task testWatcher(type: TestWatcher) {
}
它接受所有的默認測試任務的配置。您可以將任務代碼直接放在腳本或buildSrc
文件夾下。
欲瞭解更多信息,你可以看到this article我寫道。它顯示瞭如何在持續構建支持時使用它,以便在代碼更改時只重新運行更改後的測試。文章中的代碼可以在GitHub repo中找到,您可以在其中找到上面的代碼以及一個獨立的示例。
相關問題
- 1. 用gradle運行單個集成測試
- 2. ContextSwitchDeadlock運行單元時(集成)測試
- 3. 我如何才能運行單元測試只是源文件已更改?
- 4. 使用MSTest分別運行單元測試和集成測試
- 5. 當Maven運行集成測試時更改
- 6. 如何使用IDEA + Gradle + Android運行單元測試
- 7. 當進行單元測試以及何時集成測試
- 8. 在Jenkins(Gradle)上運行Android單元測試和儀器測試
- 9. Gradle文件未運行測試
- 10. 使用鼻子運行單元測試時發生南錯誤
- 11. 使用Karma使用Webpack只運行單個更改的測試文件
- 12. 使用ReSharper測試運行器來運行MSTest單元測試
- 13. 當需要運行項目時,運行MSTest單元測試
- 14. 運行單元測試時禁用bootstrap.js
- 15. 程序運行時更改源文件
- 16. NUnit System.BadImageFormatException當運行單元測試
- 17. 分離單元和集成測試的gradle中使用Groovy
- 18. 單元測試DAL - 停止運行單元測試時連接
- 19. System.IO.FileNotFoundException:無法加載文件或程序集'Oracle.DataAccess,...當運行單元測試
- 20. 按順序運行兩個測試類,同時使用gradle --parallel運行測試
- 21. 使用調試器檢測可執行文件中的運行時更改
- 22. 在運行測試/單元測試時運行rspec
- 23. 用離子2運行單元測試時奇怪的錯誤
- 24. 想運行自定義gradle任務只有在運行時單元測試
- 25. 如何使用Gradle運行JUnit測試?
- 26. 使用Qt進行單元測試:更改測試函數中使用的StandardPaths
- 27. 使用Buildr運行Ruby單元測試
- 28. 使用PyDev運行單元測試
- 29. 使用Rake運行Ruby單元測試
- 30. 使用vstest.consol.exe運行Moq單元測試
另請參見我在論壇上的這個問題。如果沒有答覆,可以開始工作... https://discuss.gradle.org/t/incremental-testing-support/24785 –