Fix spring test to properly handle failures
Failing test cases weren't not properly handled and instead caused test to break. Added a test case and verified it works for both JUnit and Spock.
This commit is contained in:
committed by
Andy Wilkinson
parent
7e7d4b7d3d
commit
cc92ba1a5c
@@ -88,7 +88,6 @@ public class TestCommand extends OptionParsingCommand {
|
||||
private static class TestOptionHandler extends OptionHandler {
|
||||
|
||||
private final GroovyCompiler compiler;
|
||||
|
||||
private TestResults results;
|
||||
|
||||
public TestOptionHandler() {
|
||||
@@ -113,11 +112,12 @@ public class TestCommand extends OptionParsingCommand {
|
||||
* against the composite AST.
|
||||
*/
|
||||
|
||||
// Compile - Pass 1 - collect testers
|
||||
// Compile - Pass 1 - compile source code to see what test libraries were
|
||||
// pulled in
|
||||
Object[] sources = this.compiler.sources(fileOptions.getFilesArray());
|
||||
Set<File> testerFiles = compileAndCollectTesterFiles(sources);
|
||||
List<File> testerFiles = compileAndCollectTesterFiles(sources);
|
||||
|
||||
// Compile - Pass 2 - with appropriate testers added in
|
||||
// Compile - Pass 2 - add appropriate testers
|
||||
List<File> files = new ArrayList<File>(fileOptions.getFiles());
|
||||
files.addAll(testerFiles);
|
||||
sources = this.compiler.sources(files.toArray(new File[files.size()]));
|
||||
@@ -145,14 +145,17 @@ public class TestCommand extends OptionParsingCommand {
|
||||
GroovyObject obj = (GroovyObject) tester.newInstance();
|
||||
this.results.add((TestResults) obj.invokeMethod("findAndTest", compiled));
|
||||
}
|
||||
|
||||
printReport(this.results);
|
||||
}
|
||||
|
||||
private Set<File> compileAndCollectTesterFiles(Object[] sources)
|
||||
private List<File> compileAndCollectTesterFiles(Object[] sources)
|
||||
throws CompilationFailedException, IOException {
|
||||
Set<File> testerFiles = new LinkedHashSet<File>();
|
||||
addTesterOnClass(sources, "org.junit.Test", "junit", testerFiles);
|
||||
addTesterOnClass(sources, "spock.lang.Specification", "spock", testerFiles);
|
||||
Set<String> testerUnits = new LinkedHashSet<String>();
|
||||
List<File> testerFiles = new ArrayList<File>();
|
||||
addTesterOnClass(sources, "org.junit.Test", testerFiles, testerUnits, "junit");
|
||||
addTesterOnClass(sources, "spock.lang.Specification", testerFiles,
|
||||
testerUnits, "junit", "spock");
|
||||
if (!testerFiles.isEmpty()) {
|
||||
testerFiles.add(createTempTesterFile("tester"));
|
||||
}
|
||||
@@ -161,12 +164,16 @@ public class TestCommand extends OptionParsingCommand {
|
||||
}
|
||||
|
||||
private void addTesterOnClass(Object[] sources, String className,
|
||||
String testerName, Set<File> testerFiles) {
|
||||
List<File> testerFiles, Set<String> testerUnits, String... testerNames) {
|
||||
for (Object source : sources) {
|
||||
if (source instanceof Class<?>) {
|
||||
try {
|
||||
((Class<?>) source).getClassLoader().loadClass(className);
|
||||
testerFiles.add(createTempTesterFile(testerName));
|
||||
for (String testerName : testerNames) {
|
||||
if (testerUnits.add(testerName)) {
|
||||
testerFiles.add(createTempTesterFile(testerName));
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
catch (ClassNotFoundException ex) {
|
||||
@@ -201,7 +208,7 @@ public class TestCommand extends OptionParsingCommand {
|
||||
String trailer = "";
|
||||
String trace = "";
|
||||
for (Failure failure : results.getFailures()) {
|
||||
trailer += failure.getDescription().toString();
|
||||
trailer += "Failed: " + failure.getDescription().toString() + "\n";
|
||||
trace += failure.getTrace() + "\n";
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
package org.springframework.boot.cli.command.tester;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -42,8 +42,8 @@ public class TestResults {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Failure[] getFailures() {
|
||||
return new Failure[0];
|
||||
public List<Failure> getFailures() {
|
||||
return new ArrayList<Failure>();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -52,23 +52,16 @@ public class TestResults {
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
private int runCount;
|
||||
|
||||
private int failureCount;
|
||||
|
||||
private Failure[] failures = new Failure[0];
|
||||
private int runCount = 0;
|
||||
private List<Failure> failures = new ArrayList<Failure>();
|
||||
|
||||
public void add(TestResults results) {
|
||||
this.runCount += results.getRunCount();
|
||||
this.failureCount += results.getFailureCount();
|
||||
List<Failure> failures = Arrays.asList(this.failures);
|
||||
failures.addAll(Arrays.asList(results.getFailures()));
|
||||
this.failures = failures.toArray(new Failure[] {});
|
||||
this.failures.addAll(results.getFailures());
|
||||
}
|
||||
|
||||
public boolean wasSuccessful() {
|
||||
return this.failureCount == 0;
|
||||
return this.failures.size() == 0;
|
||||
}
|
||||
|
||||
public int getRunCount() {
|
||||
@@ -80,18 +73,14 @@ public class TestResults {
|
||||
}
|
||||
|
||||
public int getFailureCount() {
|
||||
return this.failureCount;
|
||||
return this.failures.size();
|
||||
}
|
||||
|
||||
public void setFailureCount(int failureCount) {
|
||||
this.failureCount = failureCount;
|
||||
}
|
||||
|
||||
public Failure[] getFailures() {
|
||||
public List<Failure> getFailures() {
|
||||
return this.failures;
|
||||
}
|
||||
|
||||
public void setFailures(Failure[] failures) {
|
||||
public void setFailures(List<Failure> failures) {
|
||||
this.failures = failures;
|
||||
}
|
||||
|
||||
|
||||
@@ -38,12 +38,16 @@ public class SpockCompilerAutoConfiguration extends CompilerAutoConfiguration {
|
||||
@Override
|
||||
public void applyDependencies(DependencyCustomizer dependencies)
|
||||
throws CompilationFailedException {
|
||||
dependencies.add("spock-core");
|
||||
dependencies.add("spock-core").add("junit").add("spring-test")
|
||||
.add("hamcrest-library");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applyImports(ImportCustomizer imports) throws CompilationFailedException {
|
||||
imports.addStarImports("spock.lang");
|
||||
imports.addStarImports("spock.lang").addStarImports("org.junit")
|
||||
.addStaticStars("org.junit.Assert")
|
||||
.addStaticStars("org.hamcrest.MatcherAssert")
|
||||
.addStaticStars("org.hamcrest.Matchers");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user