下午好,我在进行存根时有一个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
}
}
答案 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