diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/autoconfigure/JUnitCompilerAutoConfiguration.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/autoconfigure/JUnitCompilerAutoConfiguration.java index c303469139..30f1b80374 100644 --- a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/autoconfigure/JUnitCompilerAutoConfiguration.java +++ b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/autoconfigure/JUnitCompilerAutoConfiguration.java @@ -38,12 +38,14 @@ public class JUnitCompilerAutoConfiguration extends CompilerAutoConfiguration { @Override public void applyDependencies(DependencyCustomizer dependencies) throws CompilationFailedException { - dependencies.add("junit").add("spring-test", "hamcrest-library"); + dependencies.add("spring-boot-starter-test"); } @Override - public void applyImports(ImportCustomizer imports) throws CompilationFailedException { - imports.addStarImports("org.junit").addStaticStars("org.junit.Assert") + public void applyImports(ImportCustomizer imports) + throws CompilationFailedException { + imports.addStarImports("org.junit") + .addStaticStars("org.junit.Assert") .addStaticStars("org.hamcrest.MatcherAssert") .addStaticStars("org.hamcrest.Matchers"); } diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/autoconfigure/SpringTestCompilerAutoConfiguration.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/autoconfigure/SpringTestCompilerAutoConfiguration.java new file mode 100644 index 0000000000..1c3d8eb640 --- /dev/null +++ b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/autoconfigure/SpringTestCompilerAutoConfiguration.java @@ -0,0 +1,64 @@ +/* + * Copyright 2012-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.cli.compiler.autoconfigure; + +import groovy.lang.GroovyClassLoader; + +import org.codehaus.groovy.ast.AnnotationNode; +import org.codehaus.groovy.ast.ClassHelper; +import org.codehaus.groovy.ast.ClassNode; +import org.codehaus.groovy.ast.expr.ClassExpression; +import org.codehaus.groovy.classgen.GeneratorContext; +import org.codehaus.groovy.control.CompilationFailedException; +import org.codehaus.groovy.control.SourceUnit; +import org.codehaus.groovy.control.customizers.ImportCustomizer; +import org.springframework.boot.cli.compiler.AstUtils; +import org.springframework.boot.cli.compiler.CompilerAutoConfiguration; +import org.springframework.boot.cli.compiler.GroovyCompilerConfiguration; + +/** + * {@link CompilerAutoConfiguration} for Spring Test + * + * @author Dave Syer + */ +public class SpringTestCompilerAutoConfiguration extends CompilerAutoConfiguration { + + @Override + public boolean matches(ClassNode classNode) { + return AstUtils.hasAtLeastOneAnnotation(classNode, "SpringApplicationConfiguration"); + } + + @Override + public void apply(GroovyClassLoader loader, + GroovyCompilerConfiguration configuration, + GeneratorContext generatorContext, SourceUnit source, + ClassNode classNode) throws CompilationFailedException { + if (!AstUtils.hasAtLeastOneAnnotation(classNode, "RunWith")) { + AnnotationNode runwith = new AnnotationNode(ClassHelper.make("RunWith")); + runwith.addMember("value", new ClassExpression(ClassHelper.make("SpringJUnit4ClassRunner"))); + classNode.addAnnotation(runwith); + } + } + + @Override + public void applyImports(ImportCustomizer imports) + throws CompilationFailedException { + imports.addStarImports("org.junit.runner") + .addStarImports("org.springframework.boot.test") + .addStarImports("org.springframework.test.context.junit4"); + } +} diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/grape/DependencyResolutionFailedException.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/grape/DependencyResolutionFailedException.java index 1a37f8b4d1..682a797337 100644 --- a/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/grape/DependencyResolutionFailedException.java +++ b/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/grape/DependencyResolutionFailedException.java @@ -21,6 +21,7 @@ package org.springframework.boot.cli.compiler.grape; * * @author Andy Wilkinson */ +@SuppressWarnings("serial") public class DependencyResolutionFailedException extends RuntimeException { /** diff --git a/spring-boot-cli/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.CompilerAutoConfiguration b/spring-boot-cli/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.CompilerAutoConfiguration index 310f8d287c..314bb1657a 100644 --- a/spring-boot-cli/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.CompilerAutoConfiguration +++ b/spring-boot-cli/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.CompilerAutoConfiguration @@ -11,4 +11,5 @@ org.springframework.boot.cli.compiler.autoconfigure.TransactionManagementCompile org.springframework.boot.cli.compiler.autoconfigure.SpringIntegrationCompilerAutoConfiguration org.springframework.boot.cli.compiler.autoconfigure.SpringSecurityCompilerAutoConfiguration org.springframework.boot.cli.compiler.autoconfigure.SpringMobileCompilerAutoConfiguration +org.springframework.boot.cli.compiler.autoconfigure.SpringTestCompilerAutoConfiguration org.springframework.boot.cli.compiler.autoconfigure.SpringWebsocketCompilerAutoConfiguration \ No newline at end of file diff --git a/spring-boot-cli/src/test/java/org/springframework/boot/cli/TestCommandIntegrationTests.java b/spring-boot-cli/src/test/java/org/springframework/boot/cli/TestCommandIntegrationTests.java index d1adcafac3..fd7aefa9b8 100644 --- a/spring-boot-cli/src/test/java/org/springframework/boot/cli/TestCommandIntegrationTests.java +++ b/spring-boot-cli/src/test/java/org/springframework/boot/cli/TestCommandIntegrationTests.java @@ -82,6 +82,12 @@ public class TestCommandIntegrationTests { assertThat(output, containsString("OK (1 test)")); } + @Test + public void integrationTest() throws Exception { + String output = this.cli.test("integration.groovy"); + assertThat(output, containsString("OK (1 test)")); + } + @Test public void spockTester() throws Exception { String output = this.cli.test("spock.groovy"); diff --git a/spring-boot-cli/test-samples/integration.groovy b/spring-boot-cli/test-samples/integration.groovy new file mode 100644 index 0000000000..6b3e1babf3 --- /dev/null +++ b/spring-boot-cli/test-samples/integration.groovy @@ -0,0 +1,23 @@ +@SpringApplicationConfiguration(classes=Application) +@IntegrationTest +class BookTests { + @Autowired + Book book + @Test + void testBooks() { + assertEquals("Tom Clancy", book.author) + } +} + +@Configuration +class Application { + @Bean + Book book() { + new Book(author: "Tom Clancy", title: "Threat Vector") + } +} + +class Book { + String author + String title +}