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

它说我没有模拟过的lateInt属性没有被初始化:

这是我的测试 list

    @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'

我得到的错误:

最佳答案

要使@Mock批注正常工作,您应该:

@RunWith(MockitoJUnitRunner::class)注释测试类

要么

在您的“设置”方法中调用MockitoAnnotations.initMocks(this)(以@Before注释)

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

编辑:

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

关于android - Mockito不适用于androidTest,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50372574/

10-09 05:26