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); }