Spring:测试包命名与@EnableAutoConfiguration

时间:2016-03-08 12:26:53

标签: testing spring-boot

有人知道测试spring-boot应用程序的惯例是什么吗?

通常,java测试被组织成模拟主包结构的包结构:

E.g。

src/main/java -> my.application.services -> MyService.java
src/test/java -> my.application.services -> MyServiceTest.java

我希望我的服务可以自动配置,所以我包括:

src/main/java -> my.application.config -> MyApplicationConfig.java
(includes @ComponentScan("my.application"))
..along with a reference to it in spring.factories

我想为我的测试添加配置。所以我创建了:

src/test/java -> my.application.services -> MyServiceTestConfig.java
(includes @EnableAutoConfiguration)

我使用以下方式运行测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyServiceTestConfig.class, loader = SpringApplicationContextLoader.class)

效果很好。两个配置类都运行:

  • MyServiceTestConfig直接
  • MyApplicationConfig凭借@EnableAutoConfiguration

当我添加第二个测试时出现问题:

src/main/java -> my.application.services -> MyOtherService.java
src/test/java -> my.application.services -> MyOtherServiceTest.java
src/test/java -> my.application.services -> MyOtherServiceTestConfig.java

我的问题是,当我运行一个测试时,也会执行另一个测试的配置。例如。运行MyServiceTest会运行所有3个配置:

  • MyServiceTestConfig直接
  • MyApplicationConfig凭借@EnableAutoConfiguration
  • MyOtherServiceTestConfig凭借@ComponentScan(“my.application”)

我可以想到这个问题的几个“解决方法”,但我真的很喜欢这个问题。据推测这是所有spring-boot应用程序的问题?是否有一个普遍接受的做法可以遵循以避免它?或者我的设置有些奇怪吗?

修改

根据以下评论,我认为我的问题无意中提出了这个问题:

测试是否有自己的@Configuration(或@Component)?如果答案是“不”,那么它几乎使我的问题无效。

0 个答案:

没有答案