为了账号安全,请及时绑定邮箱和手机立即绑定

使用开源项目Robolectric测试Android代码

标签:
Android

该项目官网 http://robolectric.org/. github地址: https://github.com/robolectric/robolectric.

该文章基于Robolectric3.0

项目介绍

Robolectric是一个开源的单元测试框架, 它可以实现直接在JVM里跑Android相关的测试(Activity/Service), 避免Android自家出品的 古老 的必须要在虚拟机上跑的测试. (注: 目前来看, Android的后续版本对测试的支持越来越好…..)

官网上给出了Robolectric的几点特性:

  1. 模拟SDK, 资源和native方法: 总的来说, robolectric可以模拟虚拟机环境, 使你可以在 JVM就可以实现大部分测试.

  2. 摆脱虚拟机的束缚. 省去编译/打包/安装流程, 加快测试和重构速度.

  3. 不需要Mocking框架

简单的测试项目

加入到项目工程

添加robolectric的依赖, 由于要使用Junit和assert相关的函数, 所以把他们的依赖也一起加上.

testCompile 'junit:junit:4.12'testCompile "org.assertj:assertj-core:1.7.0"testCompile 'org.robolectric:robolectric:3.0'

加入完成后, 把Build Variants的 "Test Artifact" 设置为 Unit Tests.

编写简单测试代码

在src目录下创建test目录, 然后在test目录下创建与main相同的package目录. 创建TestMainActivity.class类, 来测试MainActivity. 在类名的前面加入以下两个注解:

@RunWith(RobolectricGradleTestRunner.class)@Config(constants = BuildConfig.class)public class TestMainActivity {

第二个注解必须要将constants设置为编译系统生成的BuildConfig文件.

可以在类里面有 @Test 注解编写测试方法.例如:

@RunWith(RobolectricGradleTestRunner.class)@Config(constants = BuildConfig.class)public class TestMainActivity {
    @Test
    public void init(){
	ActivityController controller = Robolectric.buildActivity(MainActivity.class).create().start();
	MainActivity activity = (MainActivity)controller.get();

	controller.resume();

	FloatingActionButton button = (FloatingActionButton)activity.findViewById(R.id.fab);
	button.performClick();

	assertTrue(button.getVisibility() == View.GONE);
    }}

最后可以右键该类点击运行或通过gradle命令来实现跑测试.

Robolectric文档

模拟Activity的生命周期

通过ActivityController这个API可以实现对Activity生命周期 的控制. 通过以下API可以获取一个ActivityController实例化.

ActivityController controller = Robolectric.buildActivity(MyAwesomeActivity.class).create().start();

controller创建出来之后, 就可以调用start(), pause(), stop() 或者destroy()等函数来模仿Activity流程, 例如下面的代码就是 一个完整的activity流程:

Activity activity = Robolectric.buildActivity(MyAwesomeActivity.class).create().start().resume().visible().get();

注: visible()函数用来模拟activity attach到一个窗口的过程, 如果需要使用activity中 view相关的函数, 必须要先调用visible().

用Intent 或 savedInstanceState启动/恢复 Activity

//intentIntent intent = new Intent(Intent.ACTION_VIEW);Activity activity = Robolectric.buildActivity(MyAwesomeActivity.class).withIntent(intent).create().get();/bundleBundle savedInstanceState = new Bundle();Activity activity = Robolectric.buildActivity(MyAwesomeActivity.class)
    .create()
    .restoreInstanceState(savedInstanceState)
    .get();

原文链接:http://www.apkbus.com/blog-705730-60474.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消