【问题标题】:Can't find @SpringBootApplication from JUnit test file无法从 JUnit 测试文件中找到 @SpringBootApplication
【发布时间】:2017-05-23 01:30:47
【问题描述】:
我按照这里的指南进行操作,https://spring.io/guides/gs/spring-boot/ - 克隆了项目,使用 Gradle 构建并尝试运行...应用程序运行良好。然后我根据我的要求更改了一些文件结构并尝试运行那里给出的单元测试用例,但是得到了这个错误-
找不到@SpringBootConfiguration,您需要在测试中使用@ContextConfiguration 或@SpringBootTest(classes=...)
我只是重构那里的代码,这是我目前的项目结构-
/projectroot
- /src/main/java
-Application.java
-/controller
-MyController.java
-/util
-MyUtil.java
-/model
-MyModel.java
现在尝试从
运行测试用例
/src/test/java/controller/MyControllerTest.java
我已经浏览了这个Stack Overflow link 并明白如果我将我的测试文件夹放在 /src/main/java/ 下它可能会起作用。但是,如果我这样做,该测试文件将无法编译,并且将应用程序代码与测试代码一起放置似乎也不是正确的方法。我知道我遗漏了一些非常基本的东西。
【问题讨论】:
标签:
spring
spring-boot
junit
【解决方案1】:
您设置测试的方式(使用整个 Spring Boot 上下文),我相信 MyControllerTest.java 最多需要与 Application.java 处于同一级别。另外,我注意到Application.java 正在使用默认包,你应该将它移到一个包中,这样你的所有 bean 都低于你的 Spring Boot 主类:
/projectroot
- /src/main/java/com/example/project/
-Application.java
-/controller
-MyController.java
-/util
-MyUtil.java
-/model
-MyModel.java
- /src/test/java/com/example/project/
-MyControllerTest.java
Spring's documentation
如何从测试中解析 Spring Boot 的上下文:
搜索算法从包含测试的包开始
直到找到 @SpringBootApplication 或 @SpringBootConfiguration
注释类。只要你的代码结构合理
通常找到您的主要配置的方式。
关于在 Spring Boot 中使用默认包:
当一个类不包含包声明时,它被认为是
位于“默认包”中。 “默认包”的使用是
一般不鼓励,应该避免。它可以引起特别的
使用 @ComponentScan 的 Spring Boot 应用程序的问题,
@EntityScan 或 @SpringBootApplication 注释,因为每个类
从每个罐子里,都会被读取。
我们建议您遵循 Java 推荐的包命名约定并使用反向域名(例如,com.example.project)。