在 Spring Boot 中,如何在每次测试之前重置指标注册表?

Posted

技术标签:

【中文标题】在 Spring Boot 中,如何在每次测试之前重置指标注册表?【英文标题】:In Spring Boot, how to reset the metrics registry before each test? 【发布时间】:2019-12-28 04:45:13 【问题描述】:

我有测试并想针对千分尺指标做出断言,但测试以随机顺序运行,所以我想在每次测试之前重置或清除所有千分尺指标,这样我的断言总是正确的。

【问题讨论】:

【参考方案1】:

这取决于使用的 Meter 注册表。如果您使用的是SimpleMeterRegistry,您可以这样做:

registry.getMeters().forEach((meter) -> registry.remove(meter))

【讨论】:

相同但更简洁,适用于任何 MeterRegistry:registry.clear()。实际上是删除仪表而不是重置它们的值。 把它变成一个单独的答案,我很乐意投票。【参考方案2】:

您应该尝试模拟仪表注册表,因为它们正在监视并且不应该影响您的业务逻辑并用于警报。 如果这没有帮助:

对于仪表,您可以重置值

AtomicInteger myGauge = meterRegistry.gauge("numberGauge", new AtomicInteger(0));
myGauge.set(0);

对于计数器,重新初始化,

counter = meterRegistry.counter(counter.toString());

参考:https://micrometer.io/docs/concepts#_manually_incrementingdecrementing_a_gauge

【讨论】:

meterRegistry.counter() 不会重新初始化计数器,它会创建或返回现有的计数器

以上是关于在 Spring Boot 中,如何在每次测试之前重置指标注册表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Spring Boot中的所有测试用例之前只设置一次独立控制器?

如何在 Junit5 / spring boot 中命令执行控制器测试类?

如何在spring boot中的每个测试类之后销毁和重新创建bean

spring boot单元测试spring context重复加载问题

Spring Boot 不运行单元测试

如何在 Spring Boot 应用程序中预编译 jsp?