Robolectric 是 Android 的行业标准单元测试框架。借助 Robolectric,您的测试可以在 JVM 内的模拟 Android 环境中运行,而无需模拟器的开销和不稳定。 Robolectric 测试的运行速度通常比冷启动模拟器上的测试快 10 倍。
Robolectric 支持运行15 个不同版本的 Android 单元测试,范围从 Lollipop(API 级别 21)到 V(API 级别 35)。
以下是使用 Robolectric 编写的简单测试示例:
@ RunWith ( AndroidJUnit4 . class )
public class MyActivityTest {
@ Test
public void clickingButton_shouldChangeResultsViewText () {
Activity activity = Robolectric . setupActivity ( MyActivity . class );
Button button = ( Button ) activity . findViewById ( R . id . press_me_button );
TextView results = ( TextView ) activity . findViewById ( R . id . results_text_view );
button . performClick ();
assertThat ( results . getText (). toString (), equalTo ( "Testing Android Rocks!" ));
}
}
有关如何在项目中安装和使用 Robolectric、扩展其功能以及加入贡献者社区的更多信息,请访问 robolectric.org。
如果您想使用 Robolectric 测试开始一个新项目,您可以参考deckard
(适用于 Maven 或 Gradle)作为在您的计算机上设置 Android 和 Robolectric 的指南。
build.gradle
testImplementation " junit:junit:4.13.2 "
testImplementation " org.robolectric:robolectric:4.14.1 "
Robolectric 是使用 Gradle 构建的。 Android Studio 和 IntelliJ 都可以导入顶级build.gradle.kts
文件,并自动从中生成项目文件。
要在您的计算机上启动并运行 Robolectric,请查看本指南。
要获得 Robolectric 架构的高级概述,请访问 robolectric.org。
Robolectric 在多个地点得到积极开发。主要位置是这个 GitHub 存储库,它被认为是 Robolectric 代码的真实来源。这是更广泛的 Android 开发者社区做出贡献的地方。 Google 内部还有一个活跃的 Robolectric 开发树,其中有来自第一方 Android 开发人员的贡献。通过在 Google 内部拥有 Robolectric 的开发树,它使第一方 Android 开发人员能够更有效地为 Robolectric 做出贡献。每次使用Copybara
代码同步工具发生更改时,该树都会直接同步到google
分支。该分支和master
分支的双向合并定期发生。
Robolectric 还可以通过 external/robolectric repo 项目在 Android 平台上使用。对该源代码树的贡献通常与新的 SDK 支持和不断发展的平台 API 相关。此分支的更改会上游到 Google 的内部 Robolectric 树,最终传播到 GitHub 分支。
虽然很复杂,但这种分布式开发模型使不同环境中的 Android 开发人员能够使用 Robolectric 并为 Robolectric 做出贡献,同时允许更改最终进入 Robolectric 公开版本。
如果您想生活在最前沿,您可以尝试针对快照构建运行。请记住,快照代表master
上的最新更改,并且可能包含错误。
build.gradle
repositories {
maven { url " https://oss.sonatype.org/content/repositories/snapshots " }
}
dependencies {
testImplementation " org.robolectric:robolectric:4.15-SNAPSHOT "
}