Allow tests to System.exit() by default

Otherwise the ApplicationContext stays alive and if it's a
server app the JVM does not exit at the end of "spring test".
User can override with "spring test foo.groovy --nohup"
(which we have to do in our unit tests).
This commit is contained in:
Dave Syer 2014-05-28 15:47:55 +01:00
parent 7fd26a556d
commit 8436627598
4 changed files with 16 additions and 1 deletions

1
.gitignore vendored
View File

@ -13,6 +13,7 @@ build
lib/
target
.springBeans
interpolated*.xml
dependency-reduced-pom.xml
build.log
_site/

View File

@ -50,6 +50,7 @@ public class SpringCli {
int exitCode = runner.runAndHandleErrors(args);
if (exitCode != 0) {
// If successful, leave it to run in case it's a server app
System.exit(exitCode);
}
}

View File

@ -17,6 +17,7 @@
package org.springframework.boot.cli.command.test;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
import org.springframework.boot.cli.command.Command;
import org.springframework.boot.cli.command.OptionParsingCommand;
@ -45,6 +46,12 @@ public class TestCommand extends OptionParsingCommand {
private TestRunner runner;
@Override
protected void doOptions() {
option("nohup",
"Flag to indicate that the JVM should not exit when tests are finished");
}
@Override
protected void run(OptionSet options) throws Exception {
SourceOptions sourceOptions = new SourceOptions(options);
@ -53,6 +60,9 @@ public class TestCommand extends OptionParsingCommand {
this.runner = new TestRunner(configuration, sourceOptions.getSourcesArray(),
sourceOptions.getArgsArray());
this.runner.compileAndRunTests();
if (!options.has("nohup")) {
System.exit(0); // TODO: non-zero if test fails?
}
}
/**

View File

@ -75,7 +75,10 @@ public class CliTester implements TestRule {
}
public String test(String... args) throws Exception {
Future<TestCommand> future = submitCommand(new TestCommand(), args);
String[] argsToUse = new String[args.length + 1];
System.arraycopy(args, 0, argsToUse, 1, args.length);
argsToUse[0] = "--nohup";
Future<TestCommand> future = submitCommand(new TestCommand(), argsToUse);
this.commands.add(future.get(this.timeout, TimeUnit.MILLISECONDS));
return getOutput();
}