How to set different working directory per junit test class


(Jeroen Lankheet) #1

I’m trying to make each test class in my system test run in a different working directory:

task systemTest(type: Test) {
    def packageName = 'somepackage/name'
      beforeTest({ testDescriptor ->
        mkdir td.getClassName()
        setWorkingDir
td.getClassName()
    })
      ext.suiteClasses = [
        "suiteOne**",
        "suiteTwo**",
    ]
      ext.suiteClasses.each { suite ->
        include packageName + suite
    }
}

But setting the directory this way is simply ignored. Is there a better and working way? The alternative I had in mind is creating a test task for each test class, but that gets ugly as the list with test classes grows. Thanks!


(Peter Niederwieser) #2

If you truly need a different working directory per test class, creating a separate test task per test class is the only way. (You can create tasks in a loop.)


(Peter Niederwieser) #3

Actually, ‘test { forkEvery = 1; workingDir = { computeWorkingDir() } }’ might work as well, except that there is no easy way to tell what the “current” test class is when computing the working dir.


(Jeroen Lankheet) #4

Here’s how you (could) do it:

task systemTest(type: Test) {
    def packageName = 'somepackage/name/'
    ext.suiteClasses = [
        "suiteOne",
        "suiteTwo",
    ].each { suite ->
    tasks.create ( name: "$suite}", type: Test) {
         forkEvery = 1
         def myWorkingDir = 'build/run/' + suite
         mkdir myWorkingDir
         workingDir myWorkingDir
         include packageName + suite + '.class'
    }
    ext.suiteClasses.each { suite ->
        tasks[suite].execute()
    }
}

(Jeroen Lankheet) #5

Problem with this solution is that no matter what build I start, these test suites are executed for any gradle task. This makes it unsuitable for the task at hand.