1.简介
插桩测试在 Android 设备上运行,无论是物理测试还是模拟测试。因此,它们可以利用 Android 框架 API。因此,插桩测试可提供比本地测试更高的保真度,但其运行速度要慢得多。建议仅在必须对真实设备的行为进行测试的情况下使用插桩测试。
2.环境配置
在 Android Studio 项目中,将插桩测试的源文件存储在 module-name/src/androidTest/java/
中。创建新项目时,此目录已存在,并且包含插桩测试示例。
在开始之前,需要添加 AndroidX Test API,以便为应用快速构建和运行插桩测试代码。AndroidX Test 包含 JUnit 4 测试运行程序 AndroidJUnitRunner
,以及用于功能界面测试(如 Espresso、UI Automator 和 Compose 测试)的 API。
您还需要为项目配置 Android 测试依赖项,以使用 AndroidX Test 提供的测试运行程序和规则 API。
配置示例:
dependencies {
...
androidTestImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
}
如需使用 JUnit 4 测试类并访问测试过滤等功能,请务必将 AndroidJUnitRunner 指定为项目中的默认插桩测试运行程序,方法是在模块级 build.gradle
文件中添加以下设置:
defaultConfig {
...
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
3.创建插桩测试类
代码示例
import androidx.test.core.app.ActivityScenario
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Assert
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import java.util.concurrent.CountDownLatch
/**
* 描述:描述
* @author Stone
*/
@RunWith(AndroidJUnit4::class)
class MainActivityTest {
var TAG: String = "MainActivityTest"
@Before
fun setUp() {
LogUtil.i(TAG, "setup")
RemoteManager.await()
}
/**
* 打开首页
* */
@Test
fun startMain() {
LogUtil.i(TAG, "startMain")
val sce = ActivityScenario.launch(MainActivity::class.java)
val countDownLatch = CountDownLatch(1)
var tbaList = arrayOf<String>()
sce.onActivity {
LogUtil.i(TAG, "onActivity")
tbaList = it.resources.getStringArray(R.array.tab_title)
countDownLatch.countDown()
}
countDownLatch.await()
tbaList.mapIndexed { index, s ->
Thread.sleep(500)
val res = withText(tbaList[index]).matches(tbaList[index])
LogUtil.i(TAG, "onActivity,res:$res")
onView(withText(tbaList[index])).perform(click())
}
Thread.sleep(500)
Assert.assertEquals(true, true)
sce.close()
}
}
4.运行插桩测试
插桩测试可以在真实设备或模拟器上运行。
1)AndroidStudio 图形界面运行
2)命令行运行
Gradle 支持任务名称缩写。例如,输入以下命令,便可启动 connectedAndroidTest
任务:
./gradlew cAT
还可以选择运行 Gradle 任务 check 和 connectedCheck。这些任务分别运行您的本地测试或插桩测试,但包含其他 Gradle 插件添加的其他检查。
在模块上运行测试
test 和 connectedAndroidTest 任务会在项目中的每个模块上运行测试。您可以在 test 或 connectedAndroidTest 任务前加上模块名称和英文冒号 (:),以针对特定模块运行测试。例如,以下命令仅针对 app 模块运行插桩测试:
./gradlew app:connectedAndroidTest
运行特定的测试方法或类
运行本地单元测试时,Gradle 允许您使用 --tests 标记指定特定的测试。例如,以下命令仅针对指定的 build 变体运行 sampleTestMethod 测试。详细了解如何使用 --tests
标记,请参阅关于测试过滤的 Gradle 文档。
./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'
插桩测试的报告
测试报告位置