1.在AndroidManifest.xml中添加两处:
(1)
<!-- 使用单元测试类库 -->
<uses-library android:name="android.test.runner" />
这个要添加在<application>标签里面,在四大组件前面声明
(2)
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:label="niemi"
android:targetPackage="com.gracker.androidtestproject" >
</instrumentation>
这个在<application>标签外面写,注意name和targetPackage是必须的,而且需要注意的是targetPackage的内容是你应用程序的包名,和测试类无关。
2.写测试类
(1)单元测试方法需要声明微public类型
(2)单元测试方法的返回值类型为void
(3)按照JUnit3的规范要求单元测试方法的命名需要以test开头
(4)单元测试的方法必须是无参数的
(5)单元测试方法需要声明向单元测试框架抛出异常
(6)可以在setUp中做测试的初始化工作,比如打开数据库链接或者链接网络等
(7)可以在tearDown中做清理工作,如断开数据库链接或者网络等
3.由于单元测试的用例都是独立的,这就导致每次单元测试时都要实例化测试对象类,这样会代码重复。一个好的方法是在setUp中实例化测试对象。
4.如何测试private方法。使用正常方法测试private方法是不可以的,为了测试吧原方法修改为public也是不可取的,这里可以使用java的反射机制来测试private方法
比如有个private方法如下:
private int add(int a ,int b)
{
return a+b;
}
测试类可以这么写:
public void testAdd() throws Throwable{
Calculator calculator = new Calculator(); //实例化add()方法所在的对象
//获得要测试类的class字节码对象
Class<Calculator> clazzClass = Calculator.class;
//获得要调用的方法
Method method = clazzClass .getDeclaredMethod("add", new Class[]{Integer.TYPE,Integer.TYPE});
//设置可以访问私有方法
method.setAccessible(true);
//通过反射技术条用私有方法
Object resObject =method.invoke(calculator, new Object[]{2,3}); //传入参数2和3
//通过断言判断结果
assertEquals(5, resObject);
}