教师报课系统测试

一、测试工作安排

     数据库模块测试: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  阅读(537)  评论(1编辑  收藏  举报

导航