Android测试之JUnit篇
2017-02-21 本文已影响101人
卖梦想的男孩
在应用开发过程中,业务逻辑的抽象部分、核心算法等需要严格把关,测试在这一环节也显得尤为重要。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;
}
}
- 本地测试:
和传统的java测试一致,只需要添加JUnit库,写好测试用例即可。
添加依赖:
dependencies{
testCompile 'junit:junit:4.12'
}
AS中提供了方便的测试操作,直接右键即可选择测试的方法。
右键 -> GoTo -> Test (cmd+shift+T )
不同的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));
}
}
- 真机测试
真机测试略微麻烦些,不过能更真实的反应运行时的环境,而不是本地的开发环境,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:指定测试的运行时长以及运行频率。