12

私は gradle 用のカスタム プラグインを作成中です。単体テストの一環として、タスクを呼び出したいのですが、前提条件のタスクが実行されるように離れています。

残念ながら、実際のプラグインは内部プロジェクトであるため、正確なソースはわかりませんが、問題を示す単体テストを用意しました。

package toy

import org.gradle.api.Project
import org.gradle.testfixtures.ProjectBuilder
import org.junit.Test

class ToyTasksTest {

    boolean task1Run = false
    boolean task2Run = false

    @Test
    public void taskDependencies(){


        Project p = ProjectBuilder.builder().build()

        p.task("task1") << {
            p.logger.info("task1 running")
            task1Run = true
        }

        def task2 = p.task("task2", dependsOn: 'task1') << {
            p.logger.info("task2 running")
            task2Run = true
        }
        task2.execute() // <--- what magic do I need here instead of .execute()

        assert task2Run == true
        assert task1Run == true
    }
}

出力は次のとおりです。

Assertion failed: 

assert task2Run == true
       |        |
       false    false

テストをすぐに実行したい場合は、プロジェクトを github で入手できます。

書く代わりにこれを言う別の方法:

task2.execute()

私は同等のものを実行したい:

gradle task2

単体テストで。

4

4 に答える 4

7

ここで取得しようとしているのは、単体テストというよりも統合テストのようです。以前、Gradle チームのメンバーから、プラグインとタスクを作成するときにやりたいことは、タスクからできる限り/意味のあるものを POJO に分離し、それを単体テストすることであると提案されました。タスク グラフの実行、インクリメンタル タスク機能のテストなど、Gradle がユーザーと配管のために行う他のすべてのことについては、確実に遅い統合テストが必要になる可能性があります。

唯一の問題は、Gradle が現在、これらの統合テストを作成するためのツールセットを提供していないことです。そのための設計仕様がありますが、現在、必要な場合は解決策を手作りする必要があります.

私がここで使用しているものを見ることができますが、いくつかのクラスパスの問題があることに注意してください。そのため、この行が必要です。

GradleConnector を使用していて、最近見つけた他のソリューションの例は、こちらにあります。

于 2013-04-28T19:26:51.600 に答える