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

时间:2017-07-12 11:17:07

标签: 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)
    }

InternetStatusProvider的构造函数如此:

InternetStatusProvider(context:Context)

我在查找NullPointerException方法时得到internetProvider.hasInternet(),因为该方法的实现使用构造函数中传递的context并且正在调用实际方法?

我在这里缺少什么?重点是存根这个方法的真正实现?

1 个答案:

答案 0 :(得分:16)

Mockito不能存根最终方法。如果您尝试从模拟实例执行最终方法,则将执行实际代码。由于Kotlin的函数默认为Non-unique value found for constraint uniqueObjectId: 1 ,因此您必须将final修饰符添加到函数中。

Mockito中还有一个incubating feature 允许模拟最终的类和方法,这可能值得一看。