android studio3.0+配置单元测试框架Robole

2018-08-22  本文已影响0人  阡陌晗雪

最近开展新的测试工作,在测试过程中,为了扩大测试范围,将测试覆盖率达到一定比率,考虑在现有case并不能满足测试需求,so想到自己亲手编写case,基本的构思就是实现一个简单的App。为了测试case,也是绞尽脑汁。

对于android开发小白的我,在编写测试App过程中,没写一段代码都要找个手机或者虚拟设备跑一下,安装到设备上要先编译,在等待安装,非常耗时,于是就想android studio是否也可以做单元测试呢!android studio自动生成项目结构过程中,其实已经生成了测试代码的存储路径

app/src

       ├── androidTestjava (真机虚拟设备单元测试、UI测试)

       ├── main/java (业务代码)

       └── test/java (本地单元测试)

因为只想跳过代码编译、app安装时间,so选择本地单元测试。

本地单元测试,大家是不是想到了Junit,是的,java中强大的Junit单元测试框架,还是深深的影响过我的,想着android是不是也可以用Junit,尝试了Junit的各种测试方法(Junit的具体用法,请参考https://junit.org/junit5/),结果在方法中使用的Log.i方式输出日志,一直报错(见下图)

其实就是说运行出现了异常,不支持Log.i,也就是junit不支持android的sdk中提供的api(也就是jdk中没有android的运行环境)

出现了这个问题,各种查找解决方法,这个过程中认识了Robolectric,小可爱真是藏的够深的,先前都没听说过。

你的小可爱Robolectric上线了,Robolectric主要是解决了单元测试过程中不需要连接设备测试耗时的问题,同时发现它还不用导入各种依赖包,只需要配置好单元测试环境就可以了。

下面介绍配置Robolectric单元测试框架的过程:

1、添加依赖

   在项目中找到build.gradle文件,在响应位置添加如下依赖:

android {

    testOptions {

        unitTests {

                includeAndroidResources = true

        }    

    }

}

dependencies {

    testImplementation "org.robolectric:robolectric:3.8"

}

第一次运行测试的时候,会下载一些sdk依赖包

2、从主业务逻辑中生成测试类

主业务逻辑中,点击右键——>Go To——>Test

进入“choose Test for class”名称,选择“Create New Test...”

进入“Create Test”,选择需要进行单元测试的方法:

弹出“Choose Des体nation Directory”,选择测试类文件的存放位置,选择“/app/src/test.....”

可以在“/app/src/test...”目录下找到以上创建的测试类

3、测试类中添加配置注解

@RunWith(RobolectricTestRunner.class)

@Config(shadows = {ShadowLog.class},constants = BuildConfig.class,sdk = 25)

4、以上配置都做好了,那就开始单元测试之旅吧!

在所在测试类/方法,右键——>Run 类名/方法名

在run窗口中,查看运行结果。

5、robolectric配置完毕了,运行的结果也是绿色的passed状态,但是详细查看了下输出内容,发现并没有输出Log日志,纳尼,非了半天力气还是不能将Log日志输出,有点小情绪了

追本溯源:robolectric跑单元测试是在jvm环境运行的,而log属于android.until的api。不过robolectric提供给了相应的转换,只要在setUp()中添加一行代码,log就可以自由打印了

@Before

public void setUp() throws URISyntaxException {

        ShadowLog.stream = System.out;

}

6、见证奇迹吧。重新运行case。Robolectric单元测试框架配置完成。

以上为个人见解,不喜勿喷,如若有误,请留言指教

转载请标明链接

上一篇下一篇

猜你喜欢

热点阅读