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起的作用,调用事务返回了并没有真正插入数据库。

时间: 2024-08-05 23:19:47

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

测试人员如何搭建Selenium-Grid2环境(参考Java)

Selenium对于我们进行web自动化测试有很大的帮助,如果要进行大范围的测试覆盖,就不能仅仅在一两台机器上跑了:同样Selenium-Grid也给我们提供了这样的帮助,我们可以借助Selenium-Grid很容易的实现分布式测试环境的搭建.不同于其它一些通用的分布式程序[如:hudson],Selenium-Grid是专门针对Selenium的自动化分布式测试解决方案. 其优点是: 快速搭建分布环境[通过简单的参数配置] 自动分配测试脚本[针对不同环境] 只需一份测试代码[目标测试机不需要有

spring MVC 框架的搭建(myeclipse +maven)--(上)

spring mvc 的框架搭建过程如下,这个框架建议新手去看,因为搭建的是一个比较简单的矿建,当然里面涉及到的spring +hibernate相关的知识,是值得学习的. 这个项目是基于maven的主要是maven 能够很好的帮我们管理jar 包. spring mvc 框架搭建过程如下: 第一步:使用maven引入springMVC所需要的jar包 引入与springmvc相关的jar包,在pom.xml的<dependencise>标签下添加以下3个jar包 (1) spring-web

Spring Boot框架的搭建

一.优点: 1.简化了配置,是基于Spring4的一套快速开发整合包,减少复杂度 而Spring MVC基于Spring 的一个MVC框架 2.会有一个statrter整合包,减少样板代码 3.自动配置Spring 4.开箱即用,没有代码生成,也无需xml配置 具体: 你没有做任何的web.xml配置. 你没有做任何的sping mvc的配置; springboot为你做了. 你没有配置tomcat ;springboot内嵌tomcat. 二.搭建: 环境:1.java1.8 2.maven3

初识spring mvc 框架的搭建

spring mvc:spring提供的一套简洁mvc web框架 参考 http://blog.csdn.net/wangpeng047/article/details/6983027 http://blog.csdn.net/javabenface/article/details/7405677(spring3.0) http://www.cnblogs.com/ooi-/p/3535512.html(eclipse搭建web框架) 环境:eclipse(Eclipse Java EE ID

[Java] Spring + SpringMVC + Maven + JUnit 搭建

示例项目下载: https://github.com/yangyxd/SpringDemo 利用前面 SpringMVC 项目的配置方式,完成初步的项目创建.下面只讲一些不同之处. 传送门: [Java] Maven 建立 Spring MVC 工程 目录结构 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins

在ANDROID STUDIO环境下使用ESPRESSO 测试框架进行UI测试

package com.example.test; import android.support.test.filters.LargeTest;import android.support.test.rule.ActivityTestRule;import android.support.test.runner.AndroidJUnit4; import org.junit.Rule;import org.junit.Test;import org.junit.runner.RunWith; i

基于OpenGL编写一个简易的2D渲染框架02——搭建OpenGL环境

由于没有使用GLFW库,接下来得费一番功夫. 阅读这篇文章前请看一下这个网页:https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/ 以下,我摘取了一点片段 Windows上的OpenGL库 如果你是Windows平台,opengl32.lib已经包含在Microsoft SDK里了,它在Visual Studio安装的时候就默认安装了.由于这篇教程用的是VS编译器,并且是在Windo

为初学者提供一个基本Struts+Spring+Mybatis框架的搭建(主要实现登录注册):配置struts+spring篇

在struts基础上配置spring 1.同样的先导入spring的包(标志spring的包和用于spring和struts整合的包)如下: 另外,要把struts和spring结合起来还需要这个jar包:      这些包都可以从官网上下载的struts和spring的包中找到2. 2.导入jar包后要配置文件,让struts和spring真正的融合起来,也让系统真正知道spring的存在.为此,我们要配置两个三个文件: Spring 本身的配置文件applicationContext.xml

node 环境下简单web服务器搭建代码

零.前置 已经安装 node 环境. 一.代码片段 var http = require('http'); var path = require('path'); var fs = require('fs'); var url = require('url'); var server = http.createServer((req, res) => { var staticPath = path.join(__dirname, ''); var pathObj = url.parse(req.