我有以下代码:
@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
并且正在调用实际方法?
我在这里缺少什么?重点是存根这个方法的真正实现?
答案 0 :(得分:16)
Mockito不能存根最终方法。如果您尝试从模拟实例执行最终方法,则将执行实际代码。由于Kotlin的函数默认为Non-unique value found for constraint uniqueObjectId: 1
,因此您必须将final
修饰符添加到函数中。
Mockito中还有一个incubating feature 允许模拟最终的类和方法,这可能值得一看。