Espresso
1.1、Espresso简介

EspressoGoogle推出的一个AndroidUI测试框架。

Espresso官网:https://developer.android.google.cn/training/testing/espresso

1.2、引入Espresso

app模块的build.gradle.kts中设置如下:

plugins {
    id("com.android.application")
    id("kotlin-android")
    id("kotlin-android-extensions")
}

android {
    compileSdkVersion(28)

    defaultConfig {
        minSdkVersion(18)
        targetSdkVersion(28)
        applicationId = "com.fpliu.newton.util.app"
        versionCode = 1
        versionName = "1.0.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    sourceSets {
        getByName("main") {
            jniLibs.srcDir("src/main/libs")
            java.srcDirs("src/main/kotlin")
        }
        getByName("androidTest") {
            java.srcDirs("src/androidTest/kotlin")
        }
    }
}

dependencies {
    testApi("junit:junit:4.12")
    //https://developer.android.google.cn/training/testing/espresso/setup
    androidTestImplementation("androidx.test.espresso:espresso-core:3.2.0")
    androidTestImplementation("androidx.test:runner:1.2.0")
    androidTestImplementation("androidx.test:rules:1.2.0")
}
1.3、编写测试用例

app模块的${androidTestSourceSet}/${packangeName}中编写测试用例。

此示例中:${androidTestSourceSet}src/androidTest/kotlin${applicationId}com.fpliu.newton.util.app,那么就是在src/androidTest/kotlin/com/fpliu/newton/util/app中编写测试用例。

示例:

package com.fpliu.newton.util.app

import android.app.Application
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.*
import androidx.test.filters.LargeTest
import androidx.test.rule.ActivityTestRule
import androidx.test.runner.AndroidJUnit4
import com.fpliu.newton.util.appContext
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
@LargeTest
class Tests {

    @get:Rule
    val activityRule = ActivityTestRule(MainActivity::class.java)

    @Test
    fun tvIsDisplayed() {
        onView(withId(R.id.tv)).check(matches(isDisplayed()))
    }

    @Test
    fun checkAppContextIsNotNull() {
        assert(appContext is Application)
    }
}
1.4、运行测试用例

在类上运行所有的测试用例。

AndroidStudio中,方法上运行单个测试用例会报错,这是因为,AndroidStudio认为你是做单元测试,而不是Android测试

参考