2016-09-16 9 views
5

私はカスタムGradleプラグインを作成しています。私は、プラグインで作成したいすべての機能のテストを書いています。 私はプラグインを書くためにjavaを使用しています。Gradleプラグインを書くときにafterEvaluateをテストするには

プラグインインタフェースから継承したapplyメソッドでタスクを作成します。

プロジェクトのビルドライフサイクルのafterEvaluate段階で利用可能なタスクには多くの依存関係がありますが、遅かれ早かれ(少なくともapplyではありません)、これらの外部タスクが定義される。

だから私は、私はJUnitのとGradleの検査キットを使用して、次のセットアップを持っているテストコードで

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

を使用してこれらのタスクの依存関係を定義します。

@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

をしかしGradleの4.3.1のために、これは私の作品、私はこれを行うための正しい/パブリックAPIの方法を見つけることができませんでした:

このメソッドは、内部的にプロジェクトの評価を強制するため、afterEvaluateフックも呼び出されます。

関連する問題