Spring整合Junit的几种场景问题解决记录

上一篇博客记录了一下junit单元测试的一些使用的例子,但是项目中一般不会这样使用,用的最多的应该是Spring+Junit,如果是别人搭好的框架可能只需要复制粘贴,但是如果需要自己搭框架还是有一些问题需要注意一下的。

一、加载Spring的配置文件

spring是一个神奇的框架,我们用的最多的应该就是IOC和AOP,单元测试的时候因为集成了spring所以我们还是不要去new实体的好,通过spring的注解来对实体进行注入,所以就需要加载到spring的配置文件,在测试类上使用注解@ContextConfiguration可以直接加载Spring的xml文件,classpath与classpath*的区别就是一个加载当前项目路径下的xml,而加* 的还要加载引用的项目中的对应路径的xml。
@ContextConfiguration(locations = {“classpath:com/zhh/spring/spring.xml”})

二、数据库连接管理

单元测试好多也是要测试数据的入库操作,但是Spring+junit就不需要去创建数据库连接什么的,也不需要加载一下数据库相关的xml,前提是spring的xml有数据库连接的配置以及数据库相关的mapper.xml的配置引用(主要针对Mybatis),
Spring整合Junit的几种场景问题解决记录

三、dao层或者service使用了log4j,运行单元测试的时候报错

我们在代码的各个层级一般都会记录日志,但是log4j的xml配置如果没有配置在spring的xml中,则会在运行单元测试的时候报错。这个时候就需要在单元测试类执行执行,手动的加载log配置。
自定义一个Runner,使用static执行加载log4j,这样就可以在运行单元测试的时候不会报一下日志引起的问题
Spring整合Junit的几种场景问题解决记录

四、spring+junit运行的时候需要手动的指定Runner或者该Runner的子类(用于加载一些其他的东西)

@RunWith就是用来指定单元测试运行器的,由于与spring整个所以需要使用SpringJUnit4ClassRunner运行器或者子类
@RunWith(JUnit4ClassRunner.class)

五、单元测试数据污染的避免

使用单元测试其实就是调用方法,验证其正确性,但是如果多次运行单元测试,容易造成数据污染,哪怕是测试环境,污染之后也是对其他的一些流程有影响,所以就需要运行完成之后回滚该单元测试执行的sql
@Transactional
@TransactionConfiguration(transactionManager = “transactionManager”, defaultRollback = true)
通过添加以上配置,可以使sql执行完成之后回滚,是数据库的数据得到保证。

六、单元测试中service注入

单元测试的时候使用到对应的service,不需要自己去实例化,可以使用注解来直接注入。
Spring整合Junit的几种场景问题解决记录
注:自己遇到的问题目前就这么多,有最新的再重新整理,单元测试在项目中还是真的很重要的