java - 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 中?
解决方案
红鲱鱼...我的实际问题是我spring-boot-starter-web
的类路径中没有隐式导入spring-boot-starter-tomcat
. 没有这些,我试图测试的自动注册组件无法自动配置。放回starter-web
类路径解决了我的问题。
推荐阅读
- javascript - 如何使 Grid 组件可单击以选中/取消选中复选框?
- python - 使用 Markdown 在 DataTable 中调整图像大小和位置
- reactjs - 在第一次渲染时未定义上下文中的 React Native 数据
- c++ - devc++中的图形
- laravel - 未捕获的 ReferenceError:$ 未定义 Laravel 8 livewire
- c# - 如何将 recaptcha v3 令牌分配给变量?
- go - Golang context.WithTimeout 不适用于 exec.CommandContext "su -c" 命令
- .net - 如何使用 .NET API 读取存储在云中的 parquet 文件的内容
- julia - 没有可用的后端(GLMakie、CairoMakie、WGLMakie)
- java - Spark Streaming 作业未收到来自套接字的消息