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

Android单元测试报错:android.util.Log的isLoggable方法未Mock

解决“Method isLoggable in android.util.Log not mocked”测试报错

这个错误是因为JUnit单元测试环境中,Android SDK的android.util.Log类方法没有默认实现,调用时会抛出异常,以下是两种解决方式:

方式一:全局配置返回默认值

在Module级别的build.gradle文件的android块中添加testOptions配置,让所有未被Mock的Android SDK类方法返回默认值:

android {
    // 其他配置...
    testOptions {
        unitTests.returnDefaultValues = true
    }
}

配置后,未Mock的Android方法会返回对应类型的默认值(如布尔值返回false,对象返回null),Log.isLoggable就不会触发异常。

方式二:针对性Mock Log类

如果不想全局开启默认值,可以用Mockito静态MockLog类,指定isLoggable方法的返回值。修改你的测试方法如下:

@Test
fun `when Get Story Success`() = runTest {
    // 静态Mock Log类
    mockStatic(Log::class.java).use { mockedLog ->
        mockedLog.`when` { Log.isLoggable(anyString(), anyInt()) }.thenReturn(true)
        
        val data: PagingData<ListStoryItem> = StoryPagingSource.snapshot(dummyStory)
        val expectedQuote = MutableLiveData<PagingData<ListStoryItem>>()
        expectedQuote.value = data
        Mockito.`when`(storyRepository.getStory(token)).thenReturn(expectedQuote)

        val mainViewModel = MainViewModel(storyRepository)
        val actualQuote: PagingData<ListStoryItem> = mainViewModel.getStory(token).getOrAwaitValue()

        val differ = AsyncPagingDataDiffer(
            diffCallback = StoryAdapter.DIFF_CALLBACK,
            updateCallback = noopListUpdateCallback,
            workerDispatcher = Dispatchers.Main,
        )
        differ.submitData(actualQuote)

        Assert.assertNotNull(differ.snapshot())
        Assert.assertEquals(dummyStory.size, differ.snapshot().size)
        Assert.assertEquals(dummyStory[0], differ.snapshot()[0])
    }
}

需要确保依赖中包含Mockito的inline扩展,在Module的build.gradle中添加:

testImplementation "org.mockito:mockito-inline:4.+"

内容的提问来源于stack exchange,提问作者Muhammad Agil Izzulhaq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:00:13