mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-07-05 00:56:58 +08:00
Auto-configure observatibility beans in sliced tests
If @AutoConfigureObservability is applied to a sliced test, it auto-configures: - An in-memory MeterRegistry - A no-op Tracer - An ObservationRegistry Closes gh-38568
This commit is contained in:
parent
ff82b8d1c1
commit
198dbb4a45
@ -255,6 +255,11 @@ If such test needs access to an `MBeanServer`, consider marking it dirty as well
|
||||
include::code:MyJmxTests[]
|
||||
|
||||
|
||||
[[features.testing.spring-boot-applications.observations]]
|
||||
==== Using Observations
|
||||
If you annotate <<features#features.testing.spring-boot-applications.autoconfigured-tests, a sliced test>> with `@AutoConfigureObservability`, it auto-configures an `ObservationRegistry`.
|
||||
|
||||
|
||||
|
||||
[[features.testing.spring-boot-applications.metrics]]
|
||||
==== Using Metrics
|
||||
@ -262,6 +267,9 @@ Regardless of your classpath, meter registries, except the in-memory backed, are
|
||||
|
||||
If you need to export metrics to a different backend as part of an integration test, annotate it with `@AutoConfigureObservability`.
|
||||
|
||||
If you annotate <<features#features.testing.spring-boot-applications.autoconfigured-tests, a sliced test>> with `@AutoConfigureObservability`, it auto-configures an in-memory `MeterRegistry`.
|
||||
Data exporting in sliced tests is not supported with the `@AutoConfigureObservability` annotation.
|
||||
|
||||
|
||||
|
||||
[[features.testing.spring-boot-applications.tracing]]
|
||||
@ -272,6 +280,9 @@ If you need those components as part of an integration test, annotate the test w
|
||||
|
||||
If you have created your own reporting components (e.g. a custom `SpanExporter` or `SpanHandler`) and you don't want them to be active in tests, you can use the `@ConditionalOnEnabledTracing` annotation to disable them.
|
||||
|
||||
If you annotate <<features#features.testing.spring-boot-applications.autoconfigured-tests, a sliced test>> with `@AutoConfigureObservability`, it auto-configures a no-op `Tracer`.
|
||||
Data exporting in sliced tests is not supported with the `@AutoConfigureObservability` annotation.
|
||||
|
||||
|
||||
|
||||
[[features.testing.spring-boot-applications.mocking-beans]]
|
||||
|
@ -23,9 +23,15 @@ import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
||||
|
||||
/**
|
||||
* Annotation that can be applied to a test class to enable auto-configuration for
|
||||
* observability.
|
||||
* <p>
|
||||
* If this annotation is applied to a sliced test, an in-memory {@code MeterRegistry}, a
|
||||
* no-op {@code Tracer} and an {@code ObservationRegistry} is added to the application
|
||||
* context.
|
||||
*
|
||||
* @author Moritz Halbritter
|
||||
* @since 3.0.0
|
||||
@ -34,17 +40,18 @@ import java.lang.annotation.Target;
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Inherited
|
||||
@ImportAutoConfiguration
|
||||
public @interface AutoConfigureObservability {
|
||||
|
||||
/**
|
||||
* Whether metrics should be enabled in the test.
|
||||
* @return whether metrics should be enabled in the test
|
||||
* Whether metrics should be reported to external systems in the test.
|
||||
* @return whether metrics should be reported to external systems in the test
|
||||
*/
|
||||
boolean metrics() default true;
|
||||
|
||||
/**
|
||||
* Whether tracing should be enabled in the test.
|
||||
* @return whether tracing should be enabled in the test
|
||||
* Whether traces should be reported to external systems in the test.
|
||||
* @return whether traces should be reported to external systems in the test
|
||||
*/
|
||||
boolean tracing() default true;
|
||||
|
||||
|
@ -0,0 +1,13 @@
|
||||
# AutoConfigureObservability auto-configuration imports
|
||||
|
||||
# Observation
|
||||
org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration
|
||||
|
||||
# Metrics
|
||||
org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration
|
||||
org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration
|
||||
org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration
|
||||
|
||||
# Tracing
|
||||
org.springframework.boot.actuate.autoconfigure.tracing.NoopTracerAutoConfiguration
|
||||
org.springframework.boot.actuate.autoconfigure.tracing.MicrometerTracingAutoConfiguration
|
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright 2012-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.test.autoconfigure.actuate.observability;
|
||||
|
||||
import io.micrometer.core.instrument.MeterRegistry;
|
||||
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
|
||||
import io.micrometer.observation.ObservationRegistry;
|
||||
import io.micrometer.tracing.Tracer;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link AutoConfigureObservability} when used on a sliced test.
|
||||
*
|
||||
* @author Moritz Halbritter
|
||||
*/
|
||||
@WebMvcTest
|
||||
@AutoConfigureObservability
|
||||
class AutoConfigureObservabilitySlicedIntegrationTests {
|
||||
|
||||
@Autowired
|
||||
private ApplicationContext context;
|
||||
|
||||
@Test
|
||||
void shouldHaveTracer() {
|
||||
assertThat(this.context.getBean(Tracer.class)).isEqualTo(Tracer.NOOP);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldHaveMeterRegistry() {
|
||||
assertThat(this.context.getBean(MeterRegistry.class)).isInstanceOf(SimpleMeterRegistry.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldHaveObservationRegistry() {
|
||||
assertThat(this.context.getBean(ObservationRegistry.class)).isNotNull();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user