Android测试之JUnit篇

在应用开发过程中,业务逻辑的抽象部分、核心算法等需要严格把关,测试在这一环节也显得尤为重要。Android的开发语言为Java,所以最简单的方便的测试就是利用JUnit来进行测试。

JUnit在Android中有两种书写方式,分别是本地和真机测试。下面以简单的计算功能做演示。

package cn.kerison.playground.util;
/**
 * Created by k on 2017/2/21.
 */
public class Calc {
    public double add(double a,double b){
        return a+b;
    }
    public double multi(double a,double b){
        return a*b;
    }
}
  1. 本地测试:
    和传统的java测试一致,只需要添加JUnit库,写好测试用例即可。
    添加依赖:
dependencies{
    testCompile 'junit:junit:4.12'
}

AS中提供了方便的测试操作,直接右键即可选择测试的方法。
右键 -> GoTo -> Test (cmd+shift+T )

Android测试之JUnit篇_第1张图片
测试配置

不同的AS版本界面可能略微不一样,配置都是类似的,需要注意的是选在位置的时候, 本地测试的类需要放在test目录下,否则可能会提示找不到相关类。
@RunWith //指定运行环境
@Before//每次测试前都会调该方法初始化
@After //每次测试后都会调该方法释放
@Test //被测试的方法

package cn.kerison.playground.util;
import junit.framework.Assert;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
/**
 * @deprecated Included for backwards compatibility with JUnit 4.4. Will be
 *             removed in the next major release. Please use
 *             {@link BlockJUnit4ClassRunner} in place of {@link JUnit4ClassRunner}.
 */
//原JUnit4ClassRunner废弃
@RunWith(BlockJUnit4ClassRunner.class)
public class CalcTest {
    private Calc mCalc;
    @Before
    public void setUp() throws Exception {
        System.out.println("setUp");
        mCalc = new Calc();
    
    @After
    public void tearDown() throws Exception {
        System.out.println("tearDown");
        mCalc = null;
    }

    @Test
    public void add() throws Exception {
        Assert.assertEquals("call add ",6.0,mCalc.add(2, 4));
    }

    @Test
    public void multi() throws Exception {
        Assert.assertEquals("call multi ",8.0,mCalc.multi(2, 4));
    }
}
  1. 真机测试
    真机测试略微麻烦些,不过能更真实的反应运行时的环境,而不是本地的开发环境,Google也是推荐使用的。真机测试最新采用的库是AndroidJUnitRunner,实现也是JUnit,支持JUnit3和JUnit4,替代原来的InstrumentationTestRunner ,后者支持JUnit3.
  • 指定Runner的运行器
android{
defaultConfig{
  testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
  • 添加依赖
androidTestCompile ('com.android.support.test:runner:0.5', {
  //排除冲突的库
        exclude group: 'com.android.support', module: 'support-annotations'
    })

测试类的创建书写方式同JUnit,只是需要注意点是真机测试的类需要放在androidTest目录下,在运行测试类的时候,会像运行应用一样安装测试,日志输出在Android Monitor。
如果涉及到Android本身的一些测试,需要替换BlockJUnit4ClassRunner为AndroidJUnit4
AndroidJUnit4是BlockJUnit4ClassRunner的子类,做了部分增强。结合UI测试框架,可以做更多操作。

另外还可以配合注解做更详细的设计

  • @RequiresDevice:强制使用真机而不是模拟器
  • @SdkSupress:强制使用api版本 :如@SDKSupress(minSdkVersion=19)。
  • @SmallTest、@MediumTest 和 @LargeTest:指定测试的运行时长以及运行频率。

扩展传送门

你可能感兴趣的:(Android测试之JUnit篇)