簡體   English   中英

在自定義Gradle插件的單元測試中模擬應用程序變量,這取決於Android插件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM