[英]Mocking Application Variants in Unit Test for Custom Gradle Plugin That Depends On Android Plugin
我正在開發一個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
設置整個模擬文件目錄?
當使用單元測試插件ProjectBuilder
是,通常需要顯式調用Project.evaluate()
的情況下,插件使用Project.afterEvaluate()
在斷言之前添加以下內容。
project.evaluate()
Android Gradle插件還需要設置project.android
或拋出NullPointerException
。
project.android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.