无法从JUnit测试文件中找到@SpringBootApplication

时间:2017-01-08 19:38:40

标签: spring spring-boot junit

我在这里关注指南,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 /下它可能会有效。但是,如果我这样做,测试文件不会编译,它似乎也不是将应用程序代码与测试代码放在一起的正确方法。我知道我错过了一些非常基本的东西。

1 个答案:

答案 0 :(得分:2)

您设置测试的方式(使用整个Spring引导环境),我认为MyControllerTest.java最多需要与Application.java处于同一级别。另外,我注意到Application.java正在使用默认包,您应该将其移动到一个包中,以便所有的bean都在下面您的Spring Boot主类:< / p>

/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)。