首页 > 解决方案 > JUnit SpringBootTest 构造后和关闭

问题描述

我正在尝试测试一个使用ServiceRegistry(例如 Eureka/Consul)自注册的 SpringBoot 应用程序,然后在关机时取消注册。该实现只是扩展了预先存在的弹簧云抽象,例如

@Component
public class MyAutoRegistration extends AbstractAutoServiceRegistration<MyRegistration> {

   @override
   protected void register(){...}

   @Override
   protected void deregister(){...}

注册和注销在示例应用程序中按预期工作,但我无法在 SpringBootTest 中捕获这一点,因为测试在自注册发生之前运行(即在加载 spring 上下文并且日志显示“应用程序在 N 秒内启动。 ..”)。同样,测试在应用程序关闭之前完成(即在 spring 上下文关闭之前),因此在取消注册开始之前。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyClientAutoConfiguration.class)
@EnableAutoConfiguration
public class MyRegistrationTest {

@Autowired
MyRegistration record;

@SpyBean
@Autowired
ServiceRegistry<MyRegistration> registry;

@Test
public void registers_and_deregisters(){
    verify(registry, times(1)).register(record);
    verify(registry, times(1)).deregister(record);
}

找到了一个做类似事情的测试类,但它有点超出我的理解。有没有一种简单的方法可以将自动注册/注销包含到@SpringBootTest 中?

标签: javaspringjunitspring-cloud

解决方案


红鲱鱼...我的实际问题是我spring-boot-starter-web的类路径中没有隐式导入spring-boot-starter-tomcat. 没有这些,我试图测试的自动注册组件无法自动配置。放回starter-web类路径解决了我的问题。


推荐阅读