zoukankan      html  css  js  c++  java
  • 第七次作业——团队作业——项目测试

    1、项目的测试工作安排

    测试工作基本由编程人员在编码的同时进行,对于较复杂的业务逻辑进行测试。
    2、测试工具与使用

    测试工具: Unitils
    Unitils测试框架构建在DbUnit与EasyMock项目之上并与TestNg和TestNG相结合。支持数据库测试,支持利用Mock对象进行测试并提供与Spring和Hibernate相集成。
    Unitils 使用
    1.引入相关 jar

    <!-- 依赖的测试类库 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test-mvc</artifactId>
                <version>1.0.0.M1</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${org.springframework.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-all</artifactId>
                <version>${mockito-all.version}</version>
            </dependency>
            <dependency>
                <groupId>org.unitils</groupId>
                <artifactId>unitils-spring</artifactId>
                <version>${unitils.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.unitils</groupId>
                <artifactId>unitils-testng</artifactId>
                <version>${unitils.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.dbunit</groupId>
                <artifactId>dbunit</artifactId>
                <version>${dbunit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.unitils</groupId>
                <artifactId>unitils-dbunit</artifactId>
                <version>${unitils.version}</version>
                <scope>test</scope>
            </dependency>
    

    2.unitils 配置
    unitils.properties

    unitils.modules=database,dbunit,hibernate,spring
    #自定义扩展模块
    #unitils.module.dbunit.className=org.unitils.dbunit.DbUnitModule
    
    #配置数据库连接
    database.driverClassName=com.mysql.jdbc.Driver
    database.url=jdbc:mysql://localhost:3306/oc?useUnicode=true&characterEncoding=UTF-8
    database.dialect = mysql
    database.userName=root
    database.password=root
    
    #配置数据库维护策略
    # The database maintainer is disabled by default.
    updateDataBaseSchema.enabled=true
    
    #配置数据库创建策略
    #This table is by default not created automatically
    dbMaintainer.autoCreateExecutedScriptsTable=false
    #dbMaintainer.script.locations=D:/actionSpring/chapter/chapter8/src/test/resources/dbscripts
    
    #数据集加载策略
    DbUnitModule.DataSet.loadStrategy.default=org.unitils.dbunit.datasetloadstrategy.impl.InsertLoadStrategy(此处配置加载策略 InsertLoadStrategy:只插入数据)
    
    
    #配置数据集工厂
    #DbUnitModule.DataSet.factory.default=org.unitils.dbunit.datasetfactory.impl.MultiSchemaXmlDataSetFactory
    #DbUnitModule.ExpectedDataSet.factory.default=org.unitils.dbunit.datasetfactory.impl.MultiSchemaXmlDataSetFactory
    
    DbUnitModule.DataSet.factory.default=com.joc.test.dataset.excel.MultiSchemaXlsDataSetFactory
    DbUnitModule.ExpectedDataSet.factory.default=com.joc.test.dataset.excel.MultiSchemaXlsDataSetFactory
    
    
    DatabaseModule.Transactional.value.default=commit
    
    
    # XSD generator
    dataSetStructureGenerator.xsd.dirName=resources/xsd
    dbMaintainer.generateDataSetStructure.enabled=true
    
    
    
    
    
    

    3.测试 TeacherDao
    基类

    package com.joc.dao;
    
    import org.unitils.UnitilsTestNG;
    import org.unitils.spring.annotation.SpringApplicationContext;
    
    @SpringApplicationContext( {"classpath:/applicationContext.xml" })   //获取资源
    public class BaseDaoTest extends UnitilsTestNG{
    
    }
    
    

    4.TeacherDaoTest

    package com.joc.dao;
    
    import com.joc.domain.Teacher;
    import org.testng.annotations.Test;
    import org.unitils.spring.annotation.SpringBean;
    
    import static junit.framework.Assert.assertEquals;
    import static org.testng.Assert.assertNotNull;
    import static org.testng.Assert.assertNull;
    
    
    public class TeacherDaoTest extends BaseDaoTest {
        @SpringBean("teacherDao")     //注解获得bean
        private TeacherDao teacherDao;
    
        @Test
        public void findUserByUserName() {
            Teacher teacher = teacherDao.getUserByUserName("test");
            assertNull(teacher,"不存在用户名为test的用户!");
            teacher = teacherDao.getUserByUserName("12345");
            assertNotNull(teacher,"12345用户存在!");
            assertEquals("12345", teacher.getTeacherUserName());
            assertEquals("12345",teacher.getTeacherPassword());
        }
    }
    

    结果

    5.登录测试(有bug未改)

    package com.joc.web;
    
    import com.joc.web.controller.BaseController;
    import org.springframework.test.web.server.MockMvc;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.Test;
    
    import static org.springframework.test.web.server.request.MockMvcRequestBuilders.get;
    import static org.springframework.test.web.server.request.MockMvcRequestBuilders.post;
    import static org.springframework.test.web.server.result.MockMvcResultMatchers.*;
    import static org.springframework.test.web.server.setup.MockMvcBuilders.xmlConfigSetup;
    
    public class LoginControllerTest extends BaseController {
        private MockMvc mockMvc;
        String appContextPath = "classpath:/applicationContext.xml";
        String webContextPath = "file:E:/IDEAProject/AutoCS/src/main/webapp/WEB-INF/web-servlet.xml";
        String warDir = "src/main/webapp";
    
        @BeforeClass
        public void setUp() {
            mockMvc = xmlConfigSetup(appContextPath, webContextPath)
                    .configureWebAppRootDir(warDir, false)
                    .build();
        }
    
        @Test
        public void testDoLogin() throws Exception {
            mockMvc.perform(post("/login").param("userName", "tom").param("password", "12345"))
                    .andExpect(status().isOk())
                    .andExpect(forwardedUrl("/index.jsp"));
    
            mockMvc.perform(post("/login").param("userName", "123456").param("password", "12345"))
                    .andExpect(status().isOk())
                    .andExpect(forwardedUrl("/index.jsp"));
    
            mockMvc.perform(post("/login").param("userName", "12345").param("password", "12345"))
                    .andExpect(status().isOk())
                    .andExpect(forwardedUrl("/WEB-INF/jsp/success1.jsp"));
    
        }
    
        @Test
        public void testLogout() throws Exception {
            mockMvc.perform(get("/login/doLogout"))
                    .andExpect(status().isOk())
                    .andExpect(redirectedUrl("/index.jsp"));
        }
    
    }
    

    6.手动测试,启动Tomcat服务器,测试成功


    3、测试用例文档
    登录测试


    4、测试体会
    unitils 测试功能十分强大,Dao、Service、Web层都可以进行测试,只要配置几个xml文件,获取资源时尽量不要采用xml配置,尽量采用注解方法。但是强大也会有困扰,由于方法多种多样,有时候采用多种测试方法反而会出现各种bug,所以尽量采用某一种或几种方法测试。当然,在团队合作当中,并不要求每个人都充分掌握测试技巧,所以要分好工,有时候知道怎么用就行了。

    5、项目测试评述
    登录功能及Dao、Service、Web测试并没有任何错误,整体功能还行。但是用户登录后点击首页localhost地址会改变,但是页面内容并没有任何变化,且原有的某些字端会消失。这个需要改善。

  • 相关阅读:
    Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
    "=="和equals方法究竟有什么区别?
    Tomcat发生java.lang.OutOfMemoryError: PermGen space的解决方案
    HashMap原理
    springMVC
    SqlServer和Oracle修改表结构语句
    quartz定时任务时间表达式说明
    Linq to Entity 时间差作为筛选条件产生的问题
    密码学基础
    C#如何使用异步编程【BeginInvoke/EndInvoke】
  • 原文地址:https://www.cnblogs.com/hackers/p/4963598.html
Copyright © 2011-2022 走看看