我想断言一个反应式流是否发布了某些metrics。我无法使用StepVerifier触发指标发布,它也没有方法来断言任何与指标相关的内容。
订阅流确实会触发指标,但这需要管理更多的测试代码;您对使用StepVerifier打开指标发布有什么建议吗?
发布于 2021-12-01 21:01:28
Project reactor检测micrometer是否存在,并使用micrometer提供的全局注册表。您可以通过修改globalRegistry来测试您的代码,请确保在每次测试之前(如果您愿意,也可以在之后)清除注册表。
然后,您可以通过提供SimpleMeterRegistry来测试指标生成。
这并不完美,因为它摆弄了静态注册表
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Metrics;
import io.micrometer.core.instrument.MockClock;
import io.micrometer.core.instrument.simple.SimpleConfig;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import java.util.Set;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
class ReactorTest {
@Test
void happyPathSuccess() {
Set<MeterRegistry> registries = Metrics.globalRegistry.getRegistries();
registries.forEach(Metrics.globalRegistry::remove);
SimpleMeterRegistry simple = new SimpleMeterRegistry(SimpleConfig.DEFAULT, new MockClock());
Metrics.addRegistry(simple);
Mono.defer(() -> Mono.just("moooep moeeeep")).name("demo").metrics()
.as(StepVerifier::create)
.expectNext("moooep moeeeep")
.expectComplete()
.verify();
long count = simple.get("demo.flow.duration")
.tag("status", "completed")
.tag("type", "Mono")
.timer()
.count();
Assertions.assertEquals(1, count);
}
}https://stackoverflow.com/questions/70181958
复制相似问题