无法在Mockito和Kotlin中模拟最后的测试课程

时间:2019-08-17 12:17:00

标签: testing kotlin mockito

我正在尝试运行一个简单的仪器测试:

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/

我正在创建文件:

enter image description here

此行:

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'

5 个答案:

答案 0 :(得分:4)

只需添加

testImplementation'org.mockito:mockito-inline:2.8.47'

解决了这个问题。

答案 1 :(得分:2)

  1. 执行以下步骤:https://antonioleiva.com/mockito-2-kotlin/
  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)

  3. 从每个测试类中删除 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) }
    }
}

对我来说,我所做的一切就像您所做的和失败的一样。我只是想念那个注释部分。添加注释后,它可以按预期工作。