gradle构建测试时如何执行一些代码
Kotlin有一个名为的编译器插件。它强制所有带有一些注释的类都是打开的 我想在我的测试中使用这个特性,但我不想在我的生产代码中使用它(我想关闭我的类)。我该怎么做 我试过这样的方法:gradle构建测试时如何执行一些代码,gradle,kotlin,Gradle,Kotlin,Kotlin有一个名为的编译器插件。它强制所有带有一些注释的类都是打开的 我想在我的测试中使用这个特性,但我不想在我的生产代码中使用它(我想关闭我的类)。我该怎么做 我试过这样的方法: test { allOpen { annotation('com.my.Annotation') } } 但是代码总是被执行。之所以发生这种情况,是因为插件应用于build.gradle文件的根目录中 一个100%有效的解决方案是,除非设置了某些项目属性,否则不要应用插件 if (project
test {
allOpen {
annotation('com.my.Annotation')
}
}
但是代码总是被执行。之所以发生这种情况,是因为插件应用于
build.gradle
文件的根目录中
一个100%有效的解决方案是,除非设置了某些项目属性,否则不要应用插件
if (project.hasProperty("allopen")) {
apply plugin: "kotlin-allopen"
allOpen {
annotation('com.my.Annotation')
}
}
并使用以下属性运行测试:gradle-pallopentest
也许一些Gradle大师可以提出一个更好的解决方案。我也有同样的问题——因为模仿,我只想为测试打开类。我不想使用自定义参数,因为代码在CI上本地运行,因此需要到处设置 找到解决方案-检查任务名称是否包含
测试:
def isTestTask = getGradle().getStartParameter().getTaskNames().any {name -> name.contains("test")}
if (isTestTask) {
apply plugin: 'kotlin-allopen'
allOpen {
annotation('com.my.Annotation')
}
}
如果它更适合你,你可以试试:)我想,你可以这样做:
android.applicationVariants.all { ApplicationVariant variant ->
boolean hasTest = gradle.startParameter.taskNames.find {it.contains("test") || it.contains("Test")} != null
if (hasTest) {
apply plugin: 'kotlin-allopen'
allOpen {
annotation('com.my.Annotation')
}
}
}
这样,在运行测试时就不需要传递属性。但只要此注释仅用于测试类,这就不是问题,对吗?无论如何,我很感兴趣的是,为什么测试需要它?注释用于允许Mockito模拟我的生产代码,因此注释在我的生产代码中:(.为什么我需要这个?因为有模拟关闭的类,但是。这是一个很好的解决方案。:+1:另一个可能是扭转这种情况。默认情况下,它将始终打开,在发布脚本中,您可以将CLI参数设置为禁用,使它们再次成为最终值。我很好奇如何在Android Studio配置中添加属性。有任何特定的设置吗为什么不起作用?你是否正确设置了注释?可能是语法问题。我试着使用p.alexey答案中的语法,结果成功了:)您不需要ApplicationVariant
,但我发现这是最好的解决方案。谢谢!我为IDE添加了ApplicationvVariant
,以提示variant的所有属性。欢迎您!