JUnit SpringBootTest后构造和关闭

时间:2019-03-21 01:05:11

标签: java spring junit spring-cloud

我正在尝试测试一个使用ServiceRegistry自注册的SpringBoot应用程序(例如Eureka / Consul),然后在关机时注销。该实现只是简单地扩展了已有的Spring Cloud抽象,例如

@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);
}

Found a test class的作用类似,但超出了我的理解范围。有没有一种直接的方法可以将自动注册/注销包含到@SpringBootTest中?

1 个答案:

答案 0 :(得分:0)

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