• SpringJunit4 进行单元测试(实例篇--紧接上一章)


    前言:

      在做WEB项目时,我们写好了一个Dao和Service后,接下来就是要进行单元测试,测试的时候还要等到Spring容器全部加载完毕后才能进行,然后通过拿到ApplicationContext对象来gerBean()方法进行测试,或者更笨点的就是写一个控制器,在浏览器敲入地址进行deBug跟踪测试,这样不仅效率低,而且收效甚微。

      本章来讲解spring融合Junit4进行单元测试。

      本章的测试源目录和包是紧随上一章节的源代码。点我查看上一章节


    准备工作:

    •  jar包支持(上一章节代码里面已给出)
    •    测试的源代码和包结构(同上)
    •    注意:测试类test包路径最好位于src根目录下,编译后为calsses文件夹下,方便其他路径的书写

    实例代码演示:

    ****************复制该类至上一章节test包下即可************注释部分我尽可能详细讲解****************

    UserServiceTest

    package test;
    
    import java.util.List;
    import javax.annotation.Resource;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.PageRequest;
    import org.springframework.data.domain.Sort.Direction;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.springframework.test.context.transaction.TransactionConfiguration;
    import org.springframework.transaction.annotation.Transactional;
    import com.spring.jpa.user.User;
    import com.spring.jpa.user.UserService;
    
    /** 声明用的是Spring的测试类 **/
    @RunWith(SpringJUnit4ClassRunner.class)
    
    /** 声明spring主配置文件位置,注意:以当前测试类的位置为基准,有多个配置文件以字符数组声明 **/
    @ContextConfiguration(locations={"../spring-config/spring-jpa.xml"})
    
    /** 声明使用事务,不声明spring会使用默认事务管理 **/
    @Transactional
    
    /** 声明事务回滚,要不测试一个方法数据就没有了岂不很杯具,注意:插入数据时可注掉,不让事务回滚 **/
    @TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true)
    
    public class UserServiceTest {
        @Resource
        private UserService userService;
        
        @Test // 新增(来个20条数据) 注意新增的时候先把事务注掉,要不会回滚操作
        public void testSaveUser() {
            for(int i=0; i<20; i++){
                User user = new User();
                user.setUserName("system");
                user.setPassWord(i+"system");
                userService.saveUser(user);
            }
        }
        
        @Test    // 删除  有事务回滚,并不会真的删除
        public void testDeleteUser() {
            userService.deleteUser(27L);
        }
        
        @Test    // 查询所有
        public void testFindAllUser() {
            List<User> users = userService.findAllUsers();
            System.out.println(users.size());
        }
        
        @Test    // 查询分页对象
        public void testFindAllUserByPage() {
            /**
             *  创建一个分页对象   (注意:0代表的是第一页,5代表每页的大小,后两个参数不写即为默认排序)
             *  Direction:为一个枚举类,定义了DESC和ASC排序顺序
             *  id:结果集根据id来进行DESC降序排序
             *  想自己实现的话,最好继承他这个类,来定义一些个性的方法
             */
            PageRequest request = new PageRequest(1, 4, Direction.DESC, "id");
            
            Page<User> users = userService.findAllUserByPage(request);
            // 打印分页详情
            System.out.println("查询结果:共"+users.getTotalElements()+"条数据,每页显示"+users.getSize()+"条,共"+users.getTotalPages()+"页,当前第"+(users.getNumber()+1)+"页!");
            // 打印结果集的内容
            System.out.println(users.getContent());
        }
        
        // main 用于查看spring所有bean,以此可以检测spring容器是否正确初始化
        public static void main(String[] args) {
            // 我这里使用的是绝对路径,请根据你项目的路径来配置(相对路径挖不出来-OUT了)
            String []  path = {"E:/moviework/springJpa/src/spring-config/spring-jpa.xml"};
            ApplicationContext ac = new FileSystemXmlApplicationContext(path);
             String[] beans = ac.getBeanDefinitionNames();
             for(String s : beans) {
                 System.out.println(s);    // 打印bean的name
             }
        }
    }

      测试testFindAllUserByPage()方法控制台输出sql语句和信息:


      完事,就是这么简单,和普通java类的测试多的只是注解的东西。原理还是一样的,并且它支持事务的回滚,不用担心在测试的时候对数据进行破坏。只有用了你才能体会原来Spring 框架的 WEB项目测试也可以这么的简洁。

      数据都是基于上一章节来的,本章节不再贴出,项目打包的下载地址也在上一章节。点我前往上一章节

    总结:

    •   平时在编写test类的时候,写在src目录下更方便阅读和代码的编写
    •      遵守测试规范,测试类方法名为:test + 原方法名首字母大写
    •      注意@ContextConfiguration注解路径的引用

                               写作不易,难免有疏漏和错误,还请慷慨指正,觉得有帮助帮忙推荐哦

    ps:欢迎转载,转载请注明出处:http://www.cnblogs.com/liuyitian/p/4063033.html


                                             每天多学一点点     代码少敲一点点

  • 相关阅读:
    团队项目-第一阶段冲刺7
    团队项目-第一阶段冲刺6
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(六) 消息队列篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(四) 配置文件篇
  • 原文地址:https://www.cnblogs.com/liuyitian/p/4063033.html
Copyright © 2020-2023  润新知