模拟物体与Mockito Kotlin不是Stubbing方法

Stu*_*ing 4 android mockito kotlin

我有以下代码:

@RunWith(MockitoJUnitRunner::class)
class OnboardingViewModelTest {

    @Mock lateinit var authService : AuthService
    lateinit var internetProvider: InternetStatusProvider
    private lateinit var viewModel: OnboardingViewModel

    @Before
    fun setup() {
        internetProvider = mock()
        whenever(internetProvider.hasInternet()).thenReturn(true)
    }
Run Code Online (Sandbox Code Playgroud)

InternetStatusProvider看起来像这样的构造函数:

InternetStatusProvider(context:Context)

我得到一个NullPointerException捻熄时internetProvider.hasInternet()的方法,因为该方法的实现使用context传入构造和真实的方法被调用?

我在这里错过了什么?重点是存根这个方法的实际执行情况?

nha*_*man 17

Mockito不能存在最终方法.如果您尝试从模拟实例执行最终方法,则将执行实际代码.由于Kotlin的功能是final默认的,因此您必须将open修饰符添加到函数中.

还有一个孵化功能,在这的Mockito 允许最终的类和方法,这可能是值得一看的嘲讽.