我正在开发Gradle插件。我的插件取决于Android Gradle插件。我的插件为每个Android Application Variant添加了一个任务。每个任务名称都是根据变体名称构建的。
public class MyPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.android.applicationVariants.all {
project.task(type: SendApkTask, dependsOn: it.assemble, "send${it.name.capitalize()}Apk")
}
}
}
我想为MyPlugin #application(Project)创建一个单元测试。测试应验证是否已添加任务。默认情况下,应该只有发布和调试版本。
public class MyPluginTest {
Project project
@Before
public void setup() {
project = ProjectBuilder.builder().build()
}
@Test
public void testMyPluginAddsTasks() {
project.apply plugin: 'com.android.application'
project.apply plugin: MyPlugin
assertNotNull(project.tasks['sendReleaseApk'])
}
}
我无法通过这个断言。调试后,我发现project.applicationVariants
为空。我的关闭添加任务永远不会运行。如何有效地为我的测试嘲笑Android Gradle插件?我是否需要使用ProjectBuilder
设置整个模拟文件目录?
答案 0 :(得分:2)
使用ProjectBuilder
进行单元测试插件时,在插件使用Project.evaluate()
的情况下,通常需要明确调用Project.afterEvaluate()
。在断言之前添加以下内容。
project.evaluate()
Android Gradle插件还需要设置project.android
,否则会引发NullPointerException
。
project.android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
}