问题
I use this method to setup my parameterized data:
@Parameterized.Parameters
public static Collection<Object[]> getStories() {
Collection<Object[]> allStories = new ArrayList<Object[]>()
new File(SPEC_DIRECTORY).eachFileRecurse(FileType.FILES) { file ->
if (file.getName().endsWith('.story')) {
Object[] args = [file.getName(), file]
allStories << args
}
}
return allStories
}
I invoke the main test with gradle via gradle test
, but I do not seem to be able to see system properties.
If I use the invocation gradle -Dfile=test.story
, then System.getProperty('file')
is undefined. How can I pass arguments to this parameterized data builder?
回答1:
Gradle runs all tests in a separate JVM. You have to configure the test
task:
test {
systemProperty "file", "test.story"
}
For more information, see the Gradle DSL reference.
回答2:
In the interest of any beginners out there(like myself) who stumble upon this question; I'd like to explicitly mention that the systemProperty in gradle test task simply passes on system properties to the test jvm. So if you simply use
test{
systemProperty 'Chrome', 'Browser' }
You won't be able to access the property in your junit tests via ' System.getProperty("Browser") ' . Instead it needs to be coupled with the command gradle test -DBrowser=Chrome
The above case is merely an illustration and it would probably make sense to use -
test{
systemProperty 'Chrome', System.getProperty('Browser') }
along with
gradle test -DBrowser=Chrome
来源:https://stackoverflow.com/questions/8855296/using-command-line-arguments-or-system-properties-from-a-parameterized-junit-tes