android - 即使未调用该方法,Mockito never() 也会被调用吗?

标签 android unit-testing mockito

这是我的 repo

interface TrendingRepository{

fun getTrendingRepos()

测试类

@RunWith(JUnit4::class)
class TrendingViewModelTest {

    private val trendingRepository = mock(TrendingRepository::class.java)
    private var trendingViewModel = TrendingViewModel(trendingRepository)

    @Test
    fun testWithNoNetwork() {
        trendingViewModel.isConnected = false
        verify(trendingRepository, never()).getTrendingRepos()
    }

    @Test
    fun testWithNetwork() {
        trendingViewModel.isConnected = true
        verify(trendingRepository, never()).getTrendingRepos()
    }
}

趋势 View 模型

fun fetchTrendingRepos() {
    if (isConnected) {
        loadingProgress.value = true
        compositeDisposable.add(
            trendingRepository.getTrendingRepos().subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({ response ->
                    run {
                        loadingProgress.value = false
                },
                    { error ->
                        loadingProgress.value = false
                    }
                )
        )
    } 

这两个测试都通过了,但是 TrendingViewModel 仅在有 Activity 网络时才调用 getTrendingRepos()isConnected = true

最佳答案

您应该在验证之前调用您正在测试的函数:

@RunWith(JUnit4::class)
class TrendingViewModelTest {

    private val trendingRepository = mock(TrendingRepository::class.java)
    private var trendingViewModel = TrendingViewModel(trendingRepository)

    @Test
    fun testWithNoNetwork() {
        trendingViewModel.isConnected = false
        trendingViewModel.fetchTrendingRepos()
        verify(trendingRepository, never()).getTrendingRepos()
    }

    @Test
    fun testWithNetwork() {
        trendingViewModel.isConnected = true
        trendingViewModel.fetchTrendingRepos()
        verify(trendingRepository, times(1)).getTrendingRepos()
    }
}

关于android - 即使未调用该方法,Mockito never() 也会被调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58055961/

相关文章:

android - 在Android中旋转后获取ViewPager的位置

java - libGDX 在静态类中处理纹理

android - 如何在同一项目中添加两个 google-services.json 文件

java - 与 varargs() 匹配会出现编译错误

java - Mockito 1.9 : format the expected value (like "actual formatter" in custom ArgumentMatcher)

Android:按钮状态改变事件

java - 测试用例未涵盖在 cobertura 中

unit-testing - 我什么时候应该删除模拟?

c# - 如何测试一个充满常量的类

java - 如何模拟扩展另一个接口(interface)的接口(interface)