我正在尝试运行一个简单的仪器测试:
class DefaultTest {
private val networkHelper = Mockito.mock(NetworkHelperImpl::class.java)
@Test fun inter() {
given(networkHelper.isConnectedToNetwork()).willReturn(true)
assertFalse { networkHelper.isConnectedToNetwork(false) }
}
}
但是我不能因为错误:
Mockito cannot mock/spy because :
- final class
我该如何避免呢?
如本指南所述:
https://antonioleiva.com/mockito-2-kotlin/
我正在创建文件:
此行:
mock-maker-inline
但没有任何改变。
Gradle不好(我正在学习),但必须有效。我也使用单元测试,所以现在有了:
//Tests
testImplementation 'junit:junit:4.13-beta-3'
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib:1.3.41'
testImplementation 'org.jetbrains.kotlin:kotlin-test-junit:1.3.41'
androidTestImplementation 'org.mockito:mockito-core:3.0.0'
androidTestImplementation 'org.mockito:mockito-android:2.24.5'
androidTestImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0"
testImplementation 'org.amshove.kluent:kluent:1.14'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test:core:1.2.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test:rules:1.2.0'
答案 0 :(得分:4)
只需添加
testImplementation'org.mockito:mockito-inline:2.8.47'
解决了这个问题。
答案 1 :(得分:2)
更新库,并将conda activate atwork3
echo ${CONDA_DEFAULT_ENV}
> atwork3
screen -S test
> # starts screen OK but comes with env base
echo ${CONDA_DEFAULT_ENV}
> base
替换为 androidTestImplementation
。就我而言:
testImplementation“ com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0(更新)
testImplementation'org.mockito:mockito-core:3.0.0'(更新)
testImplementation'org.mockito:mockito-android:2.24.5'(用testImplementation代替androidTestImplementation)
从每个测试类中删除 MockitoAnnotations.initMocks(this)。
经过Android Studio 3.5测试
答案 2 :(得分:0)
您尝试过mockito-kotlin
吗?
将此添加到您的依赖项:
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0"
答案 3 :(得分:0)
我认为这里的问题是,您仅针对Instrumentation测试(androidTest
内部的测试)编译Mockito。但是,您想要根据放置Mockito扩展配置的位置来进行单元测试。
使用androidTestImplementation
时,您正在编译该依赖关系以进行仪器测试。使用testImplementation
将编译进行单元测试。替换:
androidTestImplementation 'org.mockito:mockito-core:3.0.0'
androidTestImplementation 'org.mockito:mockito-android:2.24.5'
androidTestImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0"
使用:
testImplementation 'org.mockito:mockito-core:3.0.0'
testImplementation 'org.mockito:mockito-android:2.24.5'
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0"
答案 4 :(得分:0)
用@RunWith(MockitoJUnitRunner::class)
注释测试班。这样您的课程将如下所示:
@RunWith(MockitoJUnitRunner::class)
class DefaultTest {
private val networkHelper = Mockito.mock(NetworkHelperImpl::class.java)
@Test fun inter() {
given(networkHelper.isConnectedToNetwork()).willReturn(true)
assertFalse { networkHelper.isConnectedToNetwork(false) }
}
}
对我来说,我所做的一切就像您所做的和失败的一样。我只是想念那个注释部分。添加注释后,它可以按预期工作。