单元测试junit
单独测试某一个方法,看运行结果是否正常,而不需要为了测试这个方法而启动整个项目,节省时间,节省测试的成本.
1,创建一个单元测试类
需要继承类android.test.AndroidTestCase(单元测试实例)
该类中可以直接运行测试方法
在里面定义一个方法,添加一个测试
如直接运行就会报错
does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-library android.test.runner in its AndroidManifest.xml
//没有在清单文件中指定指令集和使用的类库
这个时候就需要在清单文件加添加指令集和使用类库
打开清单文件,添加指令集(位置与application是同级结点)
<instrumentation
android:name="android.test.InstrumentationTestRunner"
//指定该测试框架要测试的项目名称
android:targetPackage="com.gigi.junit"
></instrumentation>
在application里面添加使用类库(与activity是同级结点)
<uses-library android:name="android.test.runner"/>
这样写完后该测试框架就可以跑起来了
运行弹出junit窗口
右上角如果是绿条说明运行成功,没有bug,如果是红条说明有bug
2,实际开发中不是把方法直接写在单元测试类中的,而是要新建一个工具类,把方法写在里面,如
public class Units {
public static int add(int i, int j){
return i + j;
}
}
然后在单元测试类中调用该方法
再调用断言(用来检测实际值与期望值是否一致)
assertEquals(expected, actual);
public class TestCase extends AndroidTestCase {
public void test(){
int result = Utils.add(3, 7);
//断言:用来检测实际值与期望值是否一致
assertEquals(10, result);
}
}
测试结果:
错误可以根据failure trace里面的内容定位bug位置
如果要测试的方法没有返回值断言就没有用了,这时可以测试业务逻辑是否正常,会不会有bug
例如在工具类中定义没有返回值的方法:
public static void devide(int i, int j){
int result = i / j;
}
在单元测试类中调用该方法
public void test2(){
Utils.devide(2, 0);
}
测试结果:
failure trace可指明bug类型及定位bug位置
3,测试框架初始化完毕之后,测试方法执行之前,此方法先调用
重写setup方法,可在你测试的方法之前执行,可将做全局变量的初始化。
protected void setUp() throws Exception {
super.setUp();
}
4,tearDown方法测试方法执行之后调用
protected void tearDown() throws Exception {
super.tearDown();
}
注:setUp与tearDown方法常常用于优化测试代码