Task always running, even when doing a gradle tasks

I posted this question a while ago about running each test suite in a different task with different workin dir, see http://forums.gradle.org/gradle/topics/how_to_set_different_working_directory_per_junit_test_class?utm_content=topic_link&utm_medium=email&utm_source=reply_notification I do have a solution for the question, but some very annoying feature has sneaked in as well.

I repeat part of the code:

task systemTest(type: Test) {
    ext.suiteClasses = [
        "suiteOne",
        "suiteTwo",
    ].each { suite ->
    tasks.create ( name: "$suite}", type: Test) {
         include packageName + suite + '.class'
    }
    ext.suiteClasses.each { suite ->
        tasks[suite].execute()
    }
}

Problem with this code snippet is that the suiteOne and suiteTwo tasks are always executed. Even when doing a gradle tasks. What can I do to make these tasks only run when I want to run the systemTest?

You are executing the tasks in the configuration phase, rather than the execution phase. Also, you shouldn’t call a task’s ‘execute’ method. It’s Gradle’s job to do this. You want something like:

task systemTest
def suiteClasses = [
    "suiteOne",
    "suiteTwo",
]
 suiteClasses.each { suite ->
    def task = tasks.create(name: "${suite}Test", type: Test) {
         include packageName + suite + '.class'
    }
    systemTest.dependsOn(task)
}

Thanks Peter, That indeed did the job(s). But now the created tasks are executed before the systemTest, while I need to do some preparation steps for the other tasks, like removing and recreating an execution environment directory.

I solved this by creating an “initSystemTest” task and make every ‘task’ I have created above depend on this initSystemTest. Is there an easier way?

Regards, Jeroen.

That’s the way to go.

The HTML test report (index.html) is overwritten after every system test task. I can see only the resulting index.html of the latest system test that has executed. The individual test reports are available, but the generated test report is incomplete. Therefore, I created a TestReport task in the test suite loop and make it reportOn the name of the task But this doesn’t work. How can I tie those reports together?

You have to configure different report locations for the ‘Test’ tasks, or use a ‘TestReport’ task to generate an aggregated report. See the Gradle User Guide and ‘samples/testing/testReport’ in the full Gradle distribution.