• spring junit


     转载自 http://blog.csdn.net/funi16/article/details/8691575

    在写单元测试的时候,一般是对数据库进行增删改查的操作,这个时候,如果之前删除了某条记录,自然后面的程序就找不到这条记录了,所以可以通过配置spring的事务管理或者测试框架来回滚,减少工作量。使用的数据库是postgreSQL和mysql。

    在写这篇文章的时候,很多地方借鉴了下面两篇文章:

    http://www.cnblogs.com/rainisic/archive/2012/01/22/Spring_Test_Framework.html

    http://blog.163.com/wf_shunqiziran/blog/static/17630720920121084325322/

    1、创建测试类

      创建一个测试用的类,推荐名称为 “被测试类名称 + Test”。

      测试类应该继承与 AbstractJUnit4SpringContextTests 或 AbstractTransactionalJUnit4SpringContextTests

      对于 AbstractJUnit4springcontextTests 和 AbstractTransactionalJUnit4SpringContextTests 类的选择:

      如果再你的测试类中,需要用到事务管理(比如要在测试结果出来之后回滚测试内容),就可以使用AbstractTransactionalJUnit4SpringTests类。事务管理的使用方法和正常使用Spring事务管理是一样的。再此需要注意的是,如果想要使用声明式事务管理,即使用AbstractTransactionalJUnitSpringContextTests类,请在applicationContext.xml文件中加入transactionManager bean:

    <bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
    </bean>

      如果没有添加上述bean,将会抛出NoSuchBeanDefinitionException,指明 No bean named 'transactionManager' is definded.

    2. 配置测试类

      添加如下内容在class前,用于配置applicationContext.xml文件的位置。

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:applicationContext.xml")

    3. 创建测试方法

      创建测试用方法,推荐名称为 “被测方法名称+ Test”。

      测试方法上方加入 @Test

    4、 通过JUnit 4 执行

      右键方法名,选择则“Run As”→“JUnit Test”即可

    我以前也是通过这种方法来配置单元测试的自动回滚的,不过在新的项目里发现不行,于是又是各种度娘谷哥,终于找到了。顺便说下我搜索到的不能自动回滚的集中原因:

    1、代码中含有try-catch块导致不能回滚。(个人觉得不靠谱)

    2、方法里面有非public方法。

    3、加载了2次配置文件,导致insert和rollback方法不在一个事物里面。我遇到的就是这种情况。

    如:我在注解当中已经加载了一次applicationContext.xml文件,而在setUp()里面又加载了一次,导致方法被当成2个事物提交了。于是我使用注解来加载bean。

    [java] view plain copy
     
    1. @Autowired  
    2.     private AppointmentDao appointmentDao;  

    单元测试用例上面的注解是:

    [java] view plain copy
     
    1. @RunWith(SpringJUnit4ClassRunner.class)  
    2. @TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)  
    3. @Transactional  
    4. /**读取配置文件到运行环境。注意:file的路径 */  
    5. @ContextConfiguration(locations={"classpath:applicationContext.xml"})  

     在applicationContext.xml文件当中:

    [java] view plain copy
     
    1. <bean id="txManager"  
    2.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
    3.         <property name="dataSource" ref="dataSource" />  
    4.     </bean>  
  • 相关阅读:
    React 组件的生命周期方法
    Ant Design 错误记录与常用例子
    roadhog中如何拷贝文件
    API加密框架monkey-api-encrypt发布1.2版本
    必杀技:当报错信息看不出原因时,怎么办?
    当Spring Cloud Alibaba Sentinel碰上Spring Cloud Sleuth会擦出怎样的火花
    Kitty-Cloud服务搭建过程剖析
    Maven快照版本要这样用才真的香!
    Kitty-Cloud环境准备
    双剑合璧的开源项目Kitty-Cloud
  • 原文地址:https://www.cnblogs.com/dongqiSilent/p/5179767.html
Copyright © 2020-2023  润新知