• 教师报课系统测试


    一、测试工作安排

         数据库模块测试: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我们会在这几天内解决的。

  • 相关阅读:
    Scrapy的架构与原理的理解【转】
    Scrapy框架的命令行详解【转】
    WPF 程序中启动和关闭外部.exe程序
    C++ 二维数组(双重指针作为函数参数)
    C++ 遇见的一些函数
    C++ #pragma 预处理指令
    C++异常处理(Exception Handling)
    C++模板学习随笔
    C++ 数组的地址问题学习随笔
    关于C++几个容易混淆的概念总结
  • 原文地址:https://www.cnblogs.com/zsy-geek/p/4963090.html
Copyright © 2020-2023  润新知