Setting System Properties for Gradle Tests

2019-09-04 05:46发布

问题:

I have an application in which each test should run in a VM whose configuration has been conditioned by a test-specific System property (which can just be based on the test class name).

Something like this sort of works:

test {
  forkEvery 1
  maxParallelForks Runtime.runtime.availableProcessors()

  beforeSuite { TestDescriptor descriptor ->
     systemProperty( 'test.class.name', descriptor.getClassName() )
  }
}

But it doesn't quite work. The names the forked JVMs see do change, but they aren't the ones I expect, and I suspect they aren't even deterministic. It seems as though there is one shared JavaForkOptions item, and that calls to beforeSuite aren't in a deterministic and exclusive way linked to the forking of a process for that suite, so the name a process gets might not match up with the one set in "its" beforeSuite call.

Is there a better way to do this, or some way to get more precise control over the forking process so that System properties could be set on a fork-specific data structure?

Thanks for any help!

标签: gradle