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

测试期间如何忽略FirebasePerf的@AddTrace注解?

测试时忽略@AddTrace注解的实用方案

方法1:通过系统属性禁用Firebase Performance instrumentation

直接在测试初始化阶段设置系统属性,让Firebase Perf跳过注解的 Instrumentation 逻辑:

@Before
fun setUp() {
    System.setProperty("firebase.performance.disableInstrumentation", "true")
}

如果用Robolectric,也可以直接在测试类配置里加:

@RunWith(RobolectricTestRunner::class)
@Config(systemProperties = ["firebase.performance.disableInstrumentation=true"])
class CustomerRepoTest {
    // 测试代码
}

方法2:Mock FirebasePerformance核心实例

如果你的类是通过依赖注入获取FirebasePerformance,直接给测试传一个空实现的Mock:

// 业务类构造注入FirebasePerformance
class CustomerRepository(private val firebasePerf: FirebasePerformance) {
    @AddTrace(name = "getCustomers")
    override suspend fun getCustomers(isDeleted: Boolean): List<Customer> {}
}

// 测试类中用Mockk/Mockito创建空Mock
val mockPerf = mockk<FirebasePerformance>(relaxed = true)
val repo = CustomerRepository(mockPerf)

如果是通过静态方法FirebasePerformance.getInstance()获取,就Mock静态方法:

@Before
fun setUp() {
    mockkStatic(FirebasePerformance::class)
    every { FirebasePerformance.getInstance() } returns mockk(relaxed = true)
}

方法3:Gradle配置中关闭测试环境的Perf instrumentation

直接在构建脚本里给测试变体禁用Firebase Perf的注解处理,从根源上避免注解生效:

// Groovy DSL
android {
    buildTypes {
        test {
            firebasePerformance {
                instrumentationEnabled = false
            }
        }
    }
}

如果用Kotlin DSL:

android {
    buildTypes {
        test {
            firebasePerformance {
                isInstrumentationEnabled = false
            }
        }
    }
}

方法4:自定义TestRule统一处理

写一个TestRule,在测试前后自动开关Perf禁用属性,不用每个测试类重复写:

class DisableFirebasePerfRule : TestRule {
    override fun apply(base: Statement, description: Description): Statement {
        return object : Statement() {
            override fun evaluate() {
                val originalProp = System.getProperty("firebase.performance.disableInstrumentation")
                System.setProperty("firebase.performance.disableInstrumentation", "true")
                try {
                    base.evaluate()
                } finally {
                    originalProp?.let { System.setProperty("firebase.performance.disableInstrumentation", it) }
                }
            }
        }
    }
}

// 测试类中直接引用
@Rule
@JvmField
val disablePerfRule = DisableFirebasePerfRule()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:05:19