我正在尝试模拟一些对象,然后将它们注入(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/