Spring测试框架JUnit搭建测试环境 不通过web服务器 初始化spring bean对象

直接使用 JUnit 测试 Spring 程序存在的不足

  • 需要使用硬编码方式手工获取 Bean:在测试用例中,我们需要通过 ApplicationContext.getBean() 的方法从 Spirng 容器中获取需要测试的目标 Bean,并且还要进行造型操作。

  • 数据库现场容易遭受破坏:测 试方法可能会对数据库记录进行更改操作,破坏数据库现场。虽然是针对开发数据库进行测试工作的,但如果数据操作的影响是持久的,将会形成积累效应并影响到 测试用例的再次执行。举个例子,假设在某个测试方法中往数据库插入一条 ID 为 1 的 t_user 记录,第一次运行不会有问题,第二次运行时,就会因为主键冲突而导致测试用例执行失败。所以测试用例应该既能够完成测试固件业务功能正确性的检查,又能够 容易地在测试完成后恢复现场,做到踏雪无迹、雁过无痕。

  • 不容易在同一事务下访问数据库以检验业务操作的正确性:当测试固件操作数据库时,为了检测数据操作的正确性,需要通过一种方便途径在测试方法相同的事务环境下访问数据库,以检查测试固件数据操作的执行效果。如果直接使用 JUnit 进行测试,我们很难完成这项操作。

Spring 测试框架是专门为测试基于 Spring 框架应用程序而设计的,它能够让测试用例非常方便地和 Spring 框架结合起来,以上所有问题都将迎刃而解。

编写 测试用例

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath*:config/spring/ApplicationContext.xml"},inheritLocations=false)
@Transactional
public class Test1 {


    @Autowired
    public   RedisTemplate redisTemplate;


   @Before
    public void beforeAction(){
        
        System.out.println("before");
    }

    @Test

    @Rollback(true)

    public void testRedis(){
        BoundListOperations opt =  redisTemplate.boundListOps(Attributes.LinkLstKey_ElevenSelectFive_CQ_Data); 
        List<Integer> lst = (List<Integer>) opt.index(2);
        System.out.println(lst.toString());
    }
}


注释:

@RunWith(SpringJUnit4ClassRunner.class)   表示该测试用例是运用junit4进行测试,也可以换成其他测试框架

@ContextConfiguration:

    

  • locations:可以通过该属性手工指定 Spring 配置文件所在的位置,可以指定一个或多个 Spring 配置文件。如下所示:

    @ContextConfiguration(locations={“xx/yy/beans1.xml”,” xx/yy/beans2.xml”})

  • inheritLocations:是否要继承父测试用例类中的 Spring 配置文件,默认为 true。

@Rollback(false) :表示该测试用例回滚


注意:

操作数据库时,数据并没有真正插入到数据库中。

这是TestContext起的作用,调用事务返回了并没有真正插入数据库。


你可能感兴趣的:(不通过web服务器,初始化spring,bean对象)