You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取使用NoopSpanBuilder的DefaultTracer实例用于单元测试

解决OpenTelemetry单元测试中使用Noop Tracer的方案

OpenTelemetry官方已经提供了完整的Noop(空实现)组件,完全满足你无需真实追踪、避免Mock并发问题的需求,无需自行编写Stub或尝试获取内部的DefaultTracer实例,具体实现方式如下:

方案一:替换全局OpenTelemetry实例

在单元测试的初始化阶段,将全局的GlobalOpenTelemetry替换为Noop实现,这样业务代码中原本调用GlobalOpenTelemetry.getTracerProvider()获取的Tracer会自动变为空实现:

import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.sdk.testing.sdk.NoopTracerProvider;
import org.junit.jupiter.api.BeforeEach;

class YourTestClass {

    @BeforeEach
    void setupNoopTelemetry() {
        // 创建Noop TracerProvider并设置为全局实例
        GlobalOpenTelemetry.set(NoopTracerProvider.create().getOpenTelemetry());
    }

    @Test
    void yourTestMethod() {
        // 业务代码中原本的调用会自动获取Noop Tracer
        Tracer tracer = GlobalOpenTelemetry.getTracerProvider().tracerBuilder("LocalTracer").build();
        // 后续调用tracer.spanBuilder(...)得到的是NoopSpanBuilder,无任何追踪开销
    }
}

方案二:直接创建Noop Tracer注入被测类

如果不想修改全局实例,可以直接创建Noop Tracer,通过构造函数或Setter注入到被测类中:

import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.sdk.testing.sdk.NoopTracerProvider;

class YourTestClass {

    @Test
    void yourTestMethod() {
        // 直接创建Noop Tracer
        Tracer noopTracer = NoopTracerProvider.create().tracerBuilder("LocalTracer").build();
        // 注入到被测类
        YourService service = new YourService(noopTracer);
        // 执行测试逻辑
    }
}

依赖说明

确保测试依赖中引入了OpenTelemetry SDK测试包(版本与项目使用的OpenTelemetry版本一致):

<!-- Maven 依赖示例 -->
<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-sdk-testing</artifactId>
    <version>1.32.0</version> <!-- 替换为你的实际版本 -->
    <scope>test</scope>
</dependency>

关键说明

  • 官方提供的NoopTracerProvider生成的Tracer、SpanBuilder、Span都是标准的空实现,不会产生任何追踪数据或性能开销,完全适配单元测试场景。
  • 避免直接依赖DefaultTracer这类SDK内部类,这类类属于实现细节,不对外暴露,也不建议直接使用。

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 03:45:06