【问题标题】:Mockito not working for androidTestMockito 不适用于 androidTest
【发布时间】:2018-05-16 13:42:53
【问题描述】:

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

这是我模拟的 lateInt 属性没有被初始化:

这是我的测试类

    @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 属性存储尚未初始化

【问题讨论】:

    标签: android kotlin mockito


    【解决方案1】:

    要让@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)

    【讨论】:

    • 好的,谢谢,这似乎至少初始化了存储对象,但是当它尝试模拟我的回调类时,它说 moickit 无法模拟这个 lass interfacem com.blah.LaunchContract$ActivityCallback
    • @jonney 确保您使用的是最新版本的 JDK 8,因为我知道旧版本存在一些问题 (github.com/mockito/mockito/issues/636)
    • @jonney 很高兴听到。我将为后代编辑答案;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 2022-11-14
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多