【发布时间】:2014-10-04 21:47:42
【问题描述】:
我有一个 Spock 测试用例,我想在其中加载 Spring 应用程序。我有一个非常基本的 Groovy 类,它是我的配置对象:
@Configuration
@EnableAutoConfiguration
class TestConfig {
@Bean
Map createSillyMsgMap() {
["sillyMsg" : "This is a silly message"]
}
public static void main(String[] args) {
println "TestConfig.main(${args})"
}
}
显然,这不是很有用,但它可以作为示例。为方便起见,我还在该类中添加了 main 方法。我的测试类只是尝试将其实例化为 Spring Boot 应用程序。像这样的:
class AppContextSpec extends Specification {
def "testSpringApplication"() {
given: "a Spring Configuration"
SpringApplication app = new SpringApplication(TestConfig)
app.headless = true
app.webEnvironment = false
app.applicationContextClass = AnnotationConfigApplicationContext
expect: "the Spring Application to be able to start"
ConfigurableApplicationContext ctxt = app.run((String[]) ["blah"])
}
}
我试图通过将 webEnvironment 属性显式设置为 false 来强制 Spring Boot 不使用 EmbeddedWebApplicationContext。但无论我做什么,Spring Boot 都坚持要启动一个 Tomcat 服务器,而且它似乎确实会拉入源代码树中标有@Component 和/或@Configuration 的其他资源。类路径上还有其他几个应用程序上下文,当然还有暗示 Web 服务类型的 jar 文件,但我很惊讶类路径上的内容应该优先于通过 webEnvironment 属性进行的显式配置。我使用 Gradle 1.12 作为构建系统,Spring Boot 版本是 1.1.4,我使用的是 Groovy 2.3.6 和 Spock 0.7-groovy-2.0。对此的任何帮助表示赞赏。
我在这里做的事情完全不正常吗?谢谢。
【问题讨论】:
标签: java spring groovy spring-boot spock