编写测试用例
测试是软件工程中一个非常重要的环节,而测试用例又可以显著地提高测试的效率和准确性,测试用例其实就是一段普通的程序代码,通常是带有期望的运行结果的,测试者可以根据最终的运行结果来判断程序是否能正常工作。
创建测试工程
测试工程通常不是独立存在的,而是依赖于某个现有工程的,一般比较常见的做法是在现有工程下新建一个tests文件夹,测试工程就存放在这里。
那么我们就给BroadcastBestPractice这个项目创建一个测试工程吧。在Eclipse的导航栏中点击File->New->Other,会打开一个对话框,展开Android目录,在里面选中Android Test Project (1) 。
点击Next选择测试工程的路径。按照惯例,我们将路径选择为BroadcastBestPractice项目的tests文件夹下 (2) 。
继续点击Next,这时会让我们选择为哪一个项目创建测试功能 (3) 。
点击Finish就可以完成测试工程的创建了。其中Manifest中就会有如下代码:
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.broadcastbestpractice"/>
<!--通过android:targetPackage="com.example.broadcastpractice"指定了测试目标的包名-->
<used-library android:name="android.test.runner"/>
进行单元测试
单元测试是指对软件中最小的功能模块进行测试,如果软件中每一个单元都能通过测试,说明代码的健壮性已经非常好了。
BroadcastBestPractice项目中有一个ActivityCollector类,主要是用于对所有的Activity进行管理的,那么我们就来测试这个类吧。首先在BroadcastBestPracticeTest项目中新建一个ActivityCollectorTest类,并让它继承自AndroidTestCase,然后重写setUp()和tearDown()方法,
public class ActivityCollectorTest extends AndroidTestCase{
/*
在所有测试用例执行之前调用,可以进行一些初始化操作
*/
@override
protected void setUp() throws Exception{
super.setUp();
}
/*
测试用例编写;定义一个以test开头的方法,测试框架会自动调用这个方法。然后我们在这个方法中可以通过断言(assert)的形式来期望一个运行结果,再和实际的运行结果进行对比,这样一条测试用例就完成了。测试用例覆盖的功能越广泛,程序出现bug的概率就会越小。比如说ActivityCollector中的addActivity()方法时用来向集合里添加活动的,那么我们就可以给这个方法编写一些测试用例。
*/
public void testAddActivity(){
assertEquals(0,ActivityCollector.activities.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来运行这个测试用例。