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

Firebase无密码登录单元测试报错:sendSignInLinkToEmail(...)不可为null

解决Firebase无密码登录单元测试的空指针异常问题

你的空指针异常核心来自两个问题:一是actionCodeSettings变量未初始化就传入方法,二是Mock配置代码的执行时机错误,且参数匹配逻辑不严谨。以下是具体修复方案:

1. 初始化ActionCodeSettings对象

测试代码中直接使用未定义的actionCodeSettings会导致传入null,触发空指针。先创建一个mock的实例:

val mockActionCodeSettings: ActionCodeSettings = mock()

2. 调整Mock配置的执行时机

你当前把whenever这类Mock配置写在类级别,会在setUp方法执行前运行,此时firebaseAuth还未被Mock初始化,必须把这些逻辑放到@Test注解的测试方法内部:

@Test
fun sendSignInLink_Success_ReturnsSuccessResponse() {
    // Mock必要依赖
    val taskVoid: Task<Void> = mock()
    val mockActionCodeSettings: ActionCodeSettings = mock()
    
    // 配置Mock行为
    whenever(taskVoid.isSuccessful).thenReturn(true)
    whenever(firebaseAuth.sendSignInLinkToEmail(anyString(), any(ActionCodeSettings::class.java)))
        .thenReturn(taskVoid)
    
    // 执行测试方法
    val result = passwordLessSignInRepo.sendSignInLink("example@gmail.com")
    
    // 断言结果
    assertEquals(Response.SUCCESS, result.response)
}

3. 使用Mockito参数匹配器(推荐)

如果你的PasswordLessSignInRepo内部是自行创建ActionCodeSettings实例,而非外部传入,硬编码参数会导致Mock匹配失败。用anyString()、any(ActionCodeSettings::class.java)这类匹配器,能确保无论Repo传入什么参数,Mock逻辑都会生效。

额外建议:如果Repo内部硬创建ActionCodeSettings,可以考虑把它改成依赖注入的方式(比如通过构造函数传入),这样测试时能更灵活地控制参数,提升测试的可靠性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:17:36