zoukankan      html  css  js  c++  java
  • SpringJUnit4ClassRunner 单元测试

    1.pom.xml中加入

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.3.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>4.3.0.RELEASE</version>
    </dependency>

    2.单元测试基本类

    package com.hshbic.cloudapp.junit;
    
    
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.runner.RunWith;
    import org.springframework.test.annotation.Rollback;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.springframework.transaction.annotation.Transactional;
    
    
    @RunWith(value = SpringJUnit4ClassRunner.class)
    @ContextConfiguration({"classpath:spring/*.xml"})
    @Rollback(value=false)
    @Transactional(transactionManager="transactionManager")
    public class BaseJunitTest {
    
        @BeforeClass
        public static void setUpBeforeClass() throws Exception {
            System.out.println("==============单元测试开始=============");
        }
    
        @AfterClass
        public static void tearDownAfterClass() throws Exception {
            System.out.println("==============单元测试结束=============");
        }
    
        
    
    }

    注解说明:
    1)@RunWith:用于指定junit运行环境,是junit提供给其他框架测试环境接口扩展,为了便于使用spring的依赖注入,spring提供了org.springframework.test.context.junit4.SpringJUnit4ClassRunner作为Junit测试环境
    2) @ContextConfiguration({"classpath:applicationContext.xml","classpath:spring/buyer/applicationContext-service.xml"})
    导入配置文件,这里我的applicationContext配置文件是根据模块来分类的。如果有多个模块就引入多个“applicationContext-service.xml”文件。如果所有的都是写在“applicationContext.xml”中则这样导入:
    @ContextConfiguration(locations = "classpath:applicationContext.xml")
    3) @Rollback 和 transactionManager @Rollback(新增注解)代替,其中只有一个属性就是boolean型的value,作用没变,值为true表示测试时如果涉及了数据库的操作,那么测试完成后,该操作会回滚,也就是不会改变数据库内容;值为false则与此相反,表示你测试的内容中对数据库的操作会真实的执行到数据库中,不会回滚。

    4) 单元测试中setUp方法和setUpBeforeClass方法的区别
    setUp方法原来是每个方法测试之前都会调用一次,而setUpBeforeClass则在整个类测试过程中只调用一次。同理,tearDown和tearDownAfterClass的方法也是在于此。setUpBeforeClass和tearDownAfterClass这两个方法是在junit4中新增的,junit3中没有。

     5)创建基本单元测试类的目的是在父类加载了spring等配置文件,子类不需要再次加载,减少重复操作

    3.单元测试子类

    package com.hshbic.cloudapp.junit;
    
    import static org.junit.Assert.*;
    
    
    import org.junit.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.annotation.Rollback;
    
    import com.hshbic.cloudapp.thirdserver.entity.CloudAppInfo;
    import com.hshbic.cloudapp.thirdserver.mapper.CloudAppInfoMapper;
    import com.hshbic.cloudapp.thirdserver.service.StatusDataPushService;
    @Rollback(value=true)
    public class StatusDataPushJunitTest extends BaseJunitTest{
        @Autowired
        public StatusDataPushService service ;
        @Autowired
        CloudAppInfoMapper appMapper;
    
        @Test
        public void test() throws Exception {
            System.out.println("开始进行 test方式的测试");
            String sign="";
            sign=service.getSign("SV-RAIN001815-0000","938233258bd0b8aad67d2a5cdfe5bac1","20180710172055");
            System.out.println("sign="+sign);
        }
        
        @Test
        public void insert() throws Exception {
            CloudAppInfo  app= new CloudAppInfo();
            app.setSystemId("SV-0000-0002");
            app.setSystemKey_develop("develop");
            app.setSystemKey_product("product");
            System.out.println("开始进行 newTest方式的测试");
            appMapper.insert(app);
            
        }
    
    }

    1)@Rollback(value=true)  子类中覆盖父类的事务

    2)继承父类,不需要再写@RunWith @ContextConfiguration@Rollback 和 transactionManager 等配置;也不需要再写setUpBeforeClass等方法

  • 相关阅读:
    tp框架 php ajax 登陆
    js代码之编程习惯
    基于bootstrap的后台左侧导航菜单和点击二级菜单刷新二级页面时候菜单展开显示当前菜单
    用WebStorm进行Angularjs 2的开发
    关于datetimepicker只显示年、月、日的设置
    checkbox多选按钮变成单选
    mac navicate破解版汉化
    mac CodeIgniter和EasyWeChat 开发微信公众号
    python settings :RROR 1130: Host 'XXXXXX' is not allowed to connect to this MySQL server
    Eclipse中如何显示代码行
  • 原文地址:https://www.cnblogs.com/peak911/p/9293145.html
Copyright © 2011-2022 走看看