Android: эспрессо + кинжал + кинжалМок + мокито - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь настроить Espresso в нашем проекте Android (который использует Dagger). У меня много проблем с Mockito, и я получаю ошибки в здесь .

Это часть моего app.gradle:

testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:$rootProject.mockitoKotlinVersion"
    androidTestImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:$rootProject.mockitoKotlinVersion"
    testImplementation "junit:junit:$rootProject.junitVersion"
    androidTestImplementation "junit:junit:$rootProject.junitVersion"
    androidTestImplementation 'com.linkedin.dexmaker:dexmaker-mockito:2.25.0'
    testImplementation "androidx.test:rules:$rootProject.androidXTestJUnitVersion"
    testImplementation "org.mockito:mockito-core:$rootProject.mockitoVersion"

    androidTestImplementation ('org.mockito:mockito-android:2.25.0') {
        exclude group: 'net.bytebuddy', module: 'byte-buddy'
        exclude group: 'net.bytebuddy', module: 'byte-buddy-android'
        exclude group: 'net.bytebuddy', module: 'byte-buddy-agent'
    }

У меня также есть:

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'net.bytebuddy') {
            details.useVersion "1.8.22"
        }
    }
}

Я также следовал статьям https://github.com/linkedin/dexmaker#mocking-final-classes--methods и https://proandroiddev.com/mocking-androidtest-in-kotlin-51f0a603d500,, чтобы иметь возможность высмеивать свои занятия в тестах инструментовки.

Это мой первый тестовый класс:

@RunWith(AndroidJUnit4::class)
class GoalEvaluationEntryFragmentTest {
    @get:Rule
    var activityRule = ActivityTestRule(GoalEvaluationActivity::class.java)
    @get:Rule
    val rule = espressoDaggerMockRule()

    @Before
    fun setup() {
        MockitoAnnotations.initMocks(this)
        val fragment = GoalEvaluationEntryFragment()
        (activityRule.activity as FragmentActivity).supportFragmentManager.beginTransaction()
            .replace(R.id.mainContainer, fragment).commit()
    }

    @Test
    fun a() {

    }
}

espressoDaggerMockRule просто

fun espressoDaggerMockRule() =
    DaggerMock.rule<AppComponent>(
        MainModule(),
        ServicesModule(app),
        ModelsModule(app)
    ) {
        set { component -> app.component = component }
    }

val app: MDApplication get() = ApplicationProvider.getApplicationContext<Context>() as MDApplication

Заранее большое спасибо!

...