存根时出现空指针异常

时间:2020-11-02 11:07:53

标签: android kotlin mockito

下午好,我在进行存根时有一个nullpointer异常

package com.micheladrien.android.fresquerappel

import android.app.Application
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import com.micheladrien.fresquerappel.R
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock    
import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
import org.mockito.junit.MockitoJUnitRunner


@RunWith(MockitoJUnitRunner::class)
class MainViewModelTest {

  @Rule
  @JvmField
  var instantTaskExecutorRule = InstantTaskExecutorRule()    

  @Mock
  val applicationMock: Application = mock(Application::class.java)
 
  @Before
  fun setUpTaskDetailViewModel() {
        `when`(applicationMock.getString(R.string.collage_climat)).thenReturn("Climat")
    }
    }

edit:我需要对函数package com.micheladrien.android.fresquerappel import android.app.Application import androidx.arch.core.executor.testing.InstantTaskExecutorRule import com.micheladrien.fresquerappel.R import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.`when` import org.mockito.Mockito.mock import org.mockito.junit.MockitoJUnitRunner @RunWith(MockitoJUnitRunner::class) class MainViewModelTest { @Rule @JvmField var instantTaskExecutorRule = InstantTaskExecutorRule() @Mock val applicationMock: Application = mock(Application::class.java) @Before fun setUpTaskDetailViewModel() { `when`(applicationMock.getString(R.string.collage_climat)).thenReturn("Climat") } } (applicationMock.getString(R.string.collage_climat))进行存根处理。thenReturn(“ Climat”) 因为我的视图模型将从上下文中获取字符串。

根据此博客文章:https://codepills.com/2018/05/10/3-basic-mistakes-for-nullpointerexception-when-mock/ 我应该将“何时”返回“何时”(答案)替换为“是”,为什么?

我已经测试过:将R.id值更改为brut数字。 =>同样的错误 在文件内部模拟文件,并在@Mock =>相同的错误中使用lateinit进行声明

与先前的问题线程Mockito - NullpointerException when stubbing Method不同 我直接使用该方法。不存根另一个方法的对象的方法。

任何帮助将不胜感激。

编辑:我要测试的VM:

when

如果您想检查Mockito版本,请按以下步骤进行: class MainViewModel(application: Application): AndroidViewModel(application), WaitingViewModel{ private val _name = MutableLiveData<String>().apply { value = application.getString(R.string.collage_climat) } val name : LiveData<String> = _name override fun notifyNewCollage(collage_name: String) { _name.value = collage_name } }

1 个答案:

答案 0 :(得分:0)

Mockito建议您不要拥有的模拟课程。因此,应用程序模拟不是一个好主意。 Junit可以为您提供所需的应用程序上下文:https://developer.android.com/training/testing/junit-runner

有关存根失败的其他信息,Mockito fails on stubbing : it tries to execute the function that should be stubbed