Mockito不适用于androidTest

时间:2018-05-16 13:42:54

标签: android kotlin mockito

我正在尝试模拟一些对象,然后将它们注入演示者但不起作用

我有一个模拟的lateInt属性没有被初始化:

这是我的测试clss

    @Mock
    lateinit var storage: StorageContract

    @Mock
    lateinit var activityCallBack: LaunchContract.ActivityCallBack

    @InjectMocks
    lateinit var launchPresenter: LaunchContract.Presenter

    @get: Rule
    @InjectMocks
    var activity: ActivityTestRule<LaunchActivity> = ActivityTestRule<LaunchActivity>(LaunchActivity::class.java)

   @Test
    fun testRegAndLoginVisible() {
        Mockito.`when`(storage.isLoggedIn()).thenReturn(false)
        onView(withId(R.id.loginBtn))
                .check(matches(isDisplayed()))
        onView(withId(R.id.registerBtn))
                .check(matches(isDisplayed()))

    }

这是我的构建脚本

 testImplementation 'junit:junit:4.12'
    testImplementation 'au.com.dius:pact-jvm-consumer-junit_2.11:3.5.10'
    testImplementation 'org.mockito:mockito-inline:2.13.0'
    testImplementation 'io.mockk:mockk:1.6.3'
    testImplementation 'org.assertj:assertj-core:3.8.0'

    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test:rules:1.0.2'
    androidTestImplementation 'junit:junit:4.12'
    androidTestImplementation 'org.mockito:mockito-android:2.13.0'

我得到的错误:

  

kotlin.UninitializedPropertyAccessException:lateinit属性存储尚未初始化

1 个答案:

答案 0 :(得分:2)

要让@Mock注释正常工作,您应该:

使用@RunWith(MockitoJUnitRunner::class)

为您的测试类添加注释

在您的&#34;设置&#34;中致电MockitoAnnotations.initMocks(this)方法(用@Before注释)

@Before
fun setup() {
   MockitoAnnotations.initMocks(this)
}

修改

此外,请确保您使用的是最新版本的JDK 8,Mockito在较旧的JDK版本中存在一些问题(https://github.com/mockito/mockito/issues/636