浅谈Android单元测试的作用以及简单示例
前提概要
受人嫌弃的单元测试
对于单元测试这个知识点,其实很多开发者是不太接触的,包括笔者,在实习之前也并未实用过单元测试,或者说并没感受到单元测试的好处。
对于bug的调试,笔者之前更倾向于使用log和断点调试,可以说会了这两个,大部分的逻辑bug都能自己解决了。这两个与看似臃肿的单元测试代码相比更受大家的喜爱。
但是,使用log和断点调试的前提是开发人员较少,甚至是单人开发的情况。如果我自己开发,我完全可以每次都使用集成测试,我知道每一个功能会涉及哪些模块的代码,然后根据逻辑设置log或者断点调试。
多人开发难以处理的问题
然而,如果是多人开发呢?每一个模块的代码很可能是由不同的人分开负责的,bug的产生由不同模块共同产生。每一个模块的代码可能都比较复杂,产生bug后,阅读其他人的模块本身比较浪费时间,其次基本不可能让你去修改其他人的代码,这可能会破坏他人的代码结构。
而且错误可能也并不在其他人的代码中,也可能是你们的交互方式有问题。产生bug的原因有太多,并且由单人直接log或者断点调试难以处理,那么这种情况怎么办呢?
单元测试就一定程度上处理了这种困难的情况:给每一个模块加上单元测试,如果该模块可以通过单元测试,就代表没有问题。
在这种情况下,程序员们面对的问题不再是要让整个项目到达理想的效果,而是让自己所面对的单元测试可以通过。这样就大大减少了多人开发中的交互成本。
简单示例
主要就两个文件:
package com.example.xujiajia_sx.myexpressotest; import android.support.v7.app.appcompatactivity; import android.os.bundle; public class mainactivity extends appcompatactivity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); } public static int calculate(int a,int b){ return a+b+1; } }
package com.example.xujiajia_sx.myexpressotest; import org.junit.test; import static org.junit.assert.*; /** * created by xujiajia_sx on 2017/8/14. */ public class simpletest { @test public void calculatetest() throws exception { assertequals(4, mainactivity.calculate(1,2)); } }
这个例子是测试了mainactivity.calculate()方法。可以在不运行这个app的情况下直接通过按simpletest .calculatetest()左边的小三角测试,如下图:
我们calculate()方法的逻辑是返回a+b+1,所以是4,最终不会报错,如果我们把assertequals中的4改成3,效果如下:
如图,测试会直接报错,并且定位到错误的那一行,然后我们就可以看到是mainactivity.calculate()输出的值不等于3所造成的。
assert方法
示例本身比较简单,但是对于刚刚接触单元测试读者可能对assertequals()比较陌生,这是assert这个类中的静态方法,单元测试中一般就是通过它来判断是否达到理想的效果。
笔者此处使用了int之间的判断,assert中还有很多其他的用法,笔者可以去androiddevelpers上自己查看,此处为了方便,笔者为了方便就直接复制了。
static void assertequals(boolean expected, boolean actual) static void assertequals(string message, long expected, long actual) static void assertequals(short expected, short actual) static void assertequals(string message, string expected, string actual) static void assertequals(string message, int expected, int actual) static void assertequals(object expected, object actual) static void assertequals(string message, boolean expected, boolean actual) static void assertequals(string expected, string actual) static void assertequals(string message, short expected, short actual) static void assertequals(string message, object expected, object actual) static void assertequals(char expected, char actual) static void assertequals(byte expected, byte actual) static void assertequals(double expected, double actual, double delta) static void assertequals(string message, char expected, char actual) static void assertequals(float expected, float actual, float delta) static void assertequals(string message, double expected, double actual, double delta) static void assertequals(string message, byte expected, byte actual) static void assertequals(string message, float expected, float actual, float delta) static void assertequals(long expected, long actual) static void assertequals(int expected, int actual) static void assertfalse(string message, boolean condition) static void assertfalse(boolean condition) static void assertnotnull(object object) static void assertnotnull(string message, object object) static void assertnotsame(string message, object expected, object actual) static void assertnotsame(object expected, object actual) static void assertnull(string message, object object) static void assertnull(object object) static void assertsame(string message, object expected, object actual) static void assertsame(object expected, object actual) static void asserttrue(string message, boolean condition) static void asserttrue(boolean condition) static void fail(string message) static void fail() static void failnotequals(string message, object expected, object actual) static void failnotsame(string message, object expected, object actual) static void failsame(string message) static string format(string message, object expected, object actual)
总结
这篇文章主要介绍了android单元测试的作用和简单的示例。但是简单的对方法的测试相信并不能满足求知欲强烈的读者。
下一篇文章笔者会讲述android单元测试中对activity的测试方法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。