【问题标题】:spring-boot: Application loads but tests failspring-boot:应用程序加载但测试失败
【发布时间】:2015-06-30 21:18:24
【问题描述】:

我在使用 Spring Boot 时遇到了相当奇怪的事情。让我们接受它。 我有一个应用程序,当从 spring-boot:run 运行时,加载非常好,我可以使用我的服务器。但是,如果我尝试运行测试(通过从 IntelliJ 启动测试或通过 surefire 插件),则无法加载上下文。

问题在于此类(仅显示相关部分):

@RestController
@RequestMapping(
  value = "/sa/revisions/"
)
@SuppressWarnings("unchecked")
class RevisionController {
  @Autowired
  // cant autowire this field
  private RepositoryEntityLinks   repositoryEntityLinks = null;
  /* omitted */
}

这是我的主要课程:

@EnableAsync
@EnableCaching
@EnableAutoConfiguration
@EnableConfigurationProperties
@Import({
  SecurityConfiguration.class,
  DataConfiguration.class,
  RestConfiguration.class
})
public class SpringAtomApplication {
  @Autowired
  private DataLoaderManager dataLoaderManager = null;

  public static void main(String[] args) {
    SpringApplication.run(SpringAtomApplication.class, args);
  }

  @Bean
  public CacheManager cacheManager() {
    final GuavaCacheManager manager = new GuavaCacheManager();
    manager.setAllowNullValues(false);
    return manager;
  }

  @PostConstruct
  private void doPostConstruct() {
    this.dataLoaderManager.doLoad();
  }
}

正如我所说,应用程序在正常运行时加载没有问题,但是当涉及到这个简单的测试时,一切都崩溃了:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SpringAtomApplication.class)
public class SpringAtomApplicationTests {
  @Test
  public void contextLoads() {
  }
}

如果有任何建议,我将不胜感激,因为我很想从测试它开始。

【问题讨论】:

  • 看来都是我的错。我在我自己的配置类之一上添加了数据休息配置的导入并通过了测试。虽然,我不知道为什么应用程序能够在没有它的情况下加载。任何人都可以给出任何提示?
  • 不,如果没有看到代码(和配置)和失败的堆栈跟踪,我无法给出任何提示。但是......我很高兴你把它整理出来。 ;)

标签: spring spring-boot spring-test


【解决方案1】:

你应该在你的测试类中设置SpringApplicationContextLoader

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(
    classes = SpringAtomApplication.class, 
    loader = SpringApplicationContextLoader.class)
public class SpringAtomApplicationTests {
  @Test
  public void contextLoads() {
  }
}

您可以使用它测试非 Web 功能(如存储库或服务)或启动完全配置的嵌入式 servlet 容器并使用 MockMvc 运行测试。

参考:http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/SpringApplicationContextLoader.html

【讨论】:

  • 据我所知,SpringApplicationConfiguration 默认使用 SpringApplicationContextLoader。但是,当我在对我的问题的评论中发布时,问题似乎出在其他地方。
  • 你能把你所有的配置文件都贴出来吗?
  • 那甚至不会编译。 @SpringApplicationConfiguration 不公开 loader 属性。相反,如前所述,@SpringApplicationConfiguration 通过将@ContextConfiguration 声明为元注释on @SpringApplicationConfiguration,透明地强制使用SpringApplicationContextLoader
猜你喜欢
  • 2018-07-11
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 2017-09-14
  • 2019-02-15
  • 1970-01-01
相关资源
最近更新 更多