教师报课系统测试
一、测试工作安排
数据库模块测试:509、530
PHP模块测试:502
界面模块测试:517、530(这块主要是手工测试)
模块整合测试:530
二、测试工具的运用与选择
Android studio 有自带的单元测试 instrumentation,我们可以直接使用;
三、测试用例文档
我们这次是在开发一个教师报课系统,就在这个教师报课系统做测试工作;
现在我们先来熟悉一下instrumentation;
instrumentation是单个activity测试,主要用于白盒测试和UI测试;
新建一个测试类继承InstrumentationTestCase类,测试类以Test为后缀;
接下来就可以建测试方法了,测试方法以test为前缀,如下图:
测试方法testAdd中assertEquals()中第一个参数是预期值,第二个参数是实际值,显然5不会等于2+5,结果会报错;运行该类后结果如下图:
我们也可以重写setUp()、tearDown()方法,setUp()主要用来初始设置,如启动一个Activity,初始化资源等,tearDown()用于垃圾处理和资源回收;
1.数据库模块测试
上面我们简单演示了测试类的用法,现在开始测试教师报课系统的数据库操作,我们的数据库操作采用afinal框架,实现数据库、表创建,以及增删改查操作,相关代码如下:
package com.ftd.schaepher.coursemanagement.db;
import android.content.Context;
import com.ftd.schaepher.coursemanagement.pojo.TableCourseMultiline;
import com.ftd.schaepher.coursemanagement.pojo.TableTaskInfo;
import com.ftd.schaepher.coursemanagement.pojo.TableUserDepartmentHead;
import com.ftd.schaepher.coursemanagement.pojo.TableUserTeacher;
import com.ftd.schaepher.coursemanagement.pojo.TableUserTeachingOffice;
import net.tsz.afinal.FinalDb;
import java.util.List;
public class CourseDBHelper {
public FinalDb db;
public CourseDBHelper(Context context) {
db = FinalDb.create(context, "teacherclass.db");
}
public CourseDBHelper() {
}
// 创建数据库
public void createDataBase(Context context) {
db = FinalDb.create(context, "teacherclass.db");
}
public void createTableTeacher() {
TableUserTeacher teacher = new TableUserTeacher();
db.save(teacher);
}
public void createTableTeachingDepartment() {
TableUserTeachingOffice tableTeachingDepartmentr = new TableUserTeachingOffice();
db.save(tableTeachingDepartmentr);
}
public void createTableSystemLeader() {
TableUserDepartmentHead tableUserDepartmentHead = new TableUserDepartmentHead();
db.save(tableUserDepartmentHead);
}
public void createTableClass() {
TableCourseMultiline tableCourseMultiline = new TableCourseMultiline();
db.save(tableCourseMultiline);
}
public void createTableTask() {
TableTaskInfo tableTaskInfo = new TableTaskInfo();
db.save(tableTaskInfo);
}
// 插入数据
public void insert(Object entity) {
db.save(entity);
}
// 删除数据,class为id为表的主键
public void delete(Class<?> clazz, String id) {
db.deleteById(clazz, id);
}
// 改
public void update(Object entity) {
db.update(entity);
}
// 查
public Object findById(String id, Class<?> clazz) {
return db.findById(id, clazz);
}
public List findall(Class<?> clazz) {
return db.findAll(clazz);
}
public FinalDb getDb() {
return db;
}
}
接下来我们新建类CourseDBHelper的测试类CourseDBHelperTest,开始测试工作:
(1) 类TestCourseDBHelper继承于类InstrumentationTestCase,我们首先重写setUp()方法,在里面完成数据库建表操作等初始化操作,接下来开始写测试方法testInsert(),插入一个教师信息,验证插入操作,代码如下:
package com.ftd.schaepher.coursemanagement.db; import android.content.Context; import android.test.InstrumentationTestCase; import com.ftd.schaepher.coursemanagement.pojo.TableUserTeacher; /** * Created by Administrator on 2015/11/13. */ public class CourseDBHelperTest extends InstrumentationTestCase { CourseDBHelper dbHelper; Context context; @Override public void setUp() throws Exception { super.setUp(); context= getInstrumentation().getTargetContext(); dbHelper = new CourseDBHelper(); dbHelper.createDataBase(context); dbHelper.createTableTeacher(); } public void testInsert()throws Exception{ //建一个测试数据 TableUserTeacher teacher = new TableUserTeacher(); teacher.setWorkNumber("3443"); teacher.setName("王五"); dbHelper.insert(teacher); } }
运行这个测试类,运行结果会显示出来,绿色代表正确,红色代表错误,结果如下,说明我们已经插入成功了;
(2)接下来我们新建测试方法testFindById(),看是否能根据教师号查询教师,我们前面已经插入了一个工号为“3443”的教师,现在就来测试这个工号;
由于我们代码还不完善,重复插入会报错,因此我们先把前面的testInsert()注释掉,代码如下
package com.ftd.schaepher.coursemanagement.db; import android.content.Context; import android.test.InstrumentationTestCase; import com.ftd.schaepher.coursemanagement.pojo.TableUserTeacher; /** * Created by Administrator on 2015/11/13. */ public class CourseDBHelperTest extends InstrumentationTestCase { CourseDBHelper dbHelper; Context context; @Override public void setUp() throws Exception { super.setUp(); context= getInstrumentation().getTargetContext(); dbHelper = new CourseDBHelper(); dbHelper.createDataBase(context); dbHelper.createTableTeacher(); } /* public void testInsert()throws Exception{ //建一个测试数据 TableUserTeacher teacher = new TableUserTeacher(); teacher.setWorkNumber("3443"); teacher.setName("王五"); dbHelper.insert(teacher); } */ public void testFindById(){ TableUserTeacher teacher2; String number = "3443"; teacher2 =(TableUserTeacher)dbHelper.findById(number,TableUserTeacher.class); assertEquals("张三", teacher2.getName().toString()); } }
我们已经知道工号为“3443”的教师名为“王五”,我们故意写成“张三”,看结果会如何;
果然运行后报错,并给出错误提示:“expected:<[张三]> but was :<[王五]>”,说明查询结果就是“王五”;
2.PHP模块测试
待补充。。。。
3.界面模块测试
这块主要是手工解决的,即在实际操作中发现bug才加以解决,经过测试,界面大体符合要求;
5.模块整合测试
模块整合测试主要是通过实际操作来实现,经过测试,这个app已经能实现数据基本的增删改查,以及绑定数据到界面上;
当然,在测试中也出现了一些bug,比如说同一数据多次插入,程序就会崩溃;
这些bug我们会在这几天解决;
四、测试体会
测试工作是非常重要的,比如在前期做好单元测试工作,就能减少后期查找bug工作量,其实花在单元测试的时间会远远小于后期查找并解决bug的时间;当然,养成做好单元测试工作的习惯也是很困难的,在这方面我们小组就做的不好,我们经常没有写测试类,而是在实际运行中解决出现的bug,可能是我们的项目经验太少,还无法深刻体会到测试工作的重要性。
五,项目测试评述
总体而言,我们已经完成了教师报课系统的基本功能,在测试中还未解决的bug我们会在这几天内解决的。
posted on 2015-11-14 03:56 hello_circle 阅读(546) 评论(1) 编辑 收藏 举报