2016-09-16 156 views
5

我正在編寫一個自定義的Gradle插件。我正在爲我想在插件中創建的每個功能編寫測試。 我正在使用java來編寫插件。如何在編寫Gradle插件時評估後評估

我在繼承自Plugin接口的apply方法中創建我的任務。

我對那些在項目構建生命週期的afterEvaluate階段可用任務數的依賴性,但是不會早(至少不是在apply FASE),我有過的方式無法控制這些外部任務被定義。

所以我用

project.afterEvaluate((project) -> { 
    customTask.dependsOn(project.getTasks().getByName("nameOfTheTask")); 
}); 

在測試代碼中,我有以下設置定義在這些任務的依賴,使用JUnit和gradle這個測試套件:

@BeforeClass 
public static void initializeProject() { 
    project = ProjectBuilder.builder().build(); 

    customPlugin = new CustomPlugin(); 
    customPlugin.apply(project); 
} 

我可以檢查規則(即在afterEvaluate塊之外)依賴於測試用例通過檢索我的任務使用

project.getTasks().findByName("customTask").getDependsOn() 

然而,這對於爲特定生命週期或更一般地說爲閉包而定義的依賴性是不可能的。

有什麼辦法來測試是否爲某個生命週期設置了正確的依賴關係?或者有沒有辦法檢索註冊了這樣的代碼塊?

P.S.我可以使用投射,反射,陰影,修改等,但我真的很想聽聽這是否可以測試,或者我可能會採取錯誤的方法。謝謝!

回答

0

它爲我,如果我應用自定義插件這樣的:

project.getPluginManager().apply(CustomPlugin.class); 
0

我找不到這樣做的正確的/公共API的方式,但是,對於gradle這個4.3.1這個工作對我來說:

project.getTasksByName("tasks", false); //internally it calls project.evaluate() 

該方法在內部強制對項目進行評估,因此也調用afterEvaluate掛鉤。