Я хотел бы задать несколько вещей для нескольких тестовых задач. В частности, я хотел бы добавить несколько переменных среды и несколько свойств системы, возможно, несколько других вещей, таких как «зависимости» или «рабочий». С регулярной Test
задачей я могу это сделать,Как расширить поведение задачи Gradle для нового типа задачи?
task test1(type:Test, dependsOn:[testPrep,testPrep1]){
workingDir testWorkingPath
systemProperty 'property','abs'
environment.find { it.key ==~ /(?i)PATH/ }.value += (System.properties['path.separator'] + myLibPath)
environment.LD_LIBRARY_PATH = "/usr/lib64:/lib64:${myLibPath}:" + environment.LD_LIBRARY_PATH
}
task test2(type:Test, dependsOn:[testPrep]){
workingDir testWorkingPath
systemProperty 'property','abs'
environment.find { it.key ==~ /(?i)PATH/ }.value += (System.properties['path.separator'] + myLibPath)
environment.LD_LIBRARY_PATH = "/usr/lib64:/lib64:${myLibPath}:" + environment.LD_LIBRARY_PATH
systemPropety 'newProperty','fdsjfkd'
}
Было бы неплохо иметь новый тип задача MyTestType
расширяющих регулярный тип тестового задания, где определяются общее определение.
task test1(type:MyTestType){
dependsOn testPrep1
}
task test2(type:MyTestType){
systemPropety 'newProperty','fdsjfkd'
}
Что было бы лучшим способом сделать это? Похоже, что метод execute()
является окончательным и не может быть расширен. Мне нужно будет сделать что-то вроде doFirst
, чтобы установить эти свойства. Должен ли я добавить все дополнительные значения в конструктор? Есть ли другой крючок, который я могу использовать? Благодарю.
спасибо. Мне нравится второй. Похоже, что первый подход нарушает часто цитируемый принцип, который «не вызывает переопределяемый метод в конструкторе», хотя он, вероятно, не имеет большого значения, так как метод 'systemProperty' вполне безопасен. Кроме того, весь контекст больше не доступен, и я должен постоянно называть 'getProject()', если мне нужно какое-либо свойство из проекта. – zggame