创建测试工程
测试工程一般是依赖于某个现有的工程,一般的做法是,在现有工程下新建一个test文件,测试工程就放在那里。
先创建一个Android Test Project
然后在AndroidManifest.xml中添加
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.broadcastbestpractice"/>
包名为要测试的android程序的包名。
并在application中添加
<uses-library android:name="android.test.runner"/>
进行单元测试
在要测试的BroadcastBestPractice项目中有一个ActivityCollector类,最主要是用于对所有的Activity进行管理的,那么我么就来测试这个类,首先在BroadcastBestPracticeTest项目中创建一个ActivityCollectorTest类让它继承AndroidTesCase,然后重写setUp()和tearDown(),如下:
public class ActivityCollectorTest extends AndroidTestCase{
@override
protected void setUp() throws Exception{
super.setUp();
}
@override
protected void tearDown() throws Exception{
super.tearDown();
}
}
- 其中setUp()方法会在所有的测试用例执行之前调用,可以在这里进行一些初始化操作,tearDown()方法会在所有的测试用例执行之后调用,可以在这里进行一些资源释放工作。
- 只需要定义一个以test开头的方法,测试框架就会自动调用这个,然后我们在方法中可以通过断言(assert)的形式来期望一个运行结果,在和实际的进行比较,这样就可以了,测试用例覆盖的功能越广泛,程序出现bug的机会越小。
- 比如说ActivityCollector中的addActivity()方法时用于向集合里添加活动的,那我们给这个方法添加测试用例代码如下:
public class ActivityCollectorTest extends AndroidTestCase{
@override
protected void setUp() throws Exception{
super.setUp();
}
public void testAddActivity(){
assertEquals(0,ActivityCollector.activity.size());
LoginActivity loginActivity = new LoginActivity();
ActivityCollector.addActivity(loginActivity);
assertEquals(1,ActivityCollector.activities.size());
}
@override
protected void tearDown() throws Exception{
super.tearDown();
}
}
然后点击测试工程Run As->Android JUnit Test来运行这个程序,当我们来测试集合中是否已经包含某个活动时,可以调用contains方法来检测。