如何使用 @WebMvcTest 连接 Micrometer
How to wire up Micrometer with @WebMvcTest
我正在尝试测试 Spring Boot 2.3 @Controller
,它通过 Actuator/Prometheus 和 @WebMvcTest
执行指标。不幸的是,NPE 失败了,可能是因为 Micrometer/Prometheus 类 在测试中不存在。
控制器确实
Counter.builder(COUNTER_STATUS)
.description(DESCRIPTION_STATUS)
.tags(TAG_ACCOUNT, String.valueOf(accountId), TAG_STATUS, String.valueOf(status))
.register(registry)
.increment();
测试有
@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
@WebMvcTest(HerodotusController.class)
@MockBean(MeterRegistry.class)
private MeterRegistry meterRegistry;
这在 Counter
行出现 NPE 失败...;我相信是因为在测试运行时没有该接口的实现(在运行时它由 io.micrometer:micrometer-registry-prometheus
实现)。
如何将 Micrometer 接口的实现放入我的测试中以使其通过?
问题是被嘲笑的MeterRegistry
。
NPE 发生在这里:
public Counter register(MeterRegistry registry) {
return registry.counter(new Meter.Id(name, tags, baseUnit, description, Type.COUNTER));
}
解决方案是不要 mock MeterRegistry
而是通过
提供一个
@TestConfiguration
static class AdditionalConfig {
@Bean
public MeterRegistry registry() {
return new SimpleMeterRegistry();
}
}
我正在尝试测试 Spring Boot 2.3 @Controller
,它通过 Actuator/Prometheus 和 @WebMvcTest
执行指标。不幸的是,NPE 失败了,可能是因为 Micrometer/Prometheus 类 在测试中不存在。
控制器确实
Counter.builder(COUNTER_STATUS)
.description(DESCRIPTION_STATUS)
.tags(TAG_ACCOUNT, String.valueOf(accountId), TAG_STATUS, String.valueOf(status))
.register(registry)
.increment();
测试有
@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
@WebMvcTest(HerodotusController.class)
@MockBean(MeterRegistry.class)
private MeterRegistry meterRegistry;
这在 Counter
行出现 NPE 失败...;我相信是因为在测试运行时没有该接口的实现(在运行时它由 io.micrometer:micrometer-registry-prometheus
实现)。
如何将 Micrometer 接口的实现放入我的测试中以使其通过?
问题是被嘲笑的MeterRegistry
。
NPE 发生在这里:
public Counter register(MeterRegistry registry) {
return registry.counter(new Meter.Id(name, tags, baseUnit, description, Type.COUNTER));
}
解决方案是不要 mock MeterRegistry
而是通过
@TestConfiguration
static class AdditionalConfig {
@Bean
public MeterRegistry registry() {
return new SimpleMeterRegistry();
}
}