Spring 测试

  测试是开发工作中必不可缺的部分。单元测试只针对当前开发的类和方法进行测试,可以简单通过模拟依赖来实现,对运行环境没有依赖;但是仅仅进行单元测试是不够的,它只能验证当前类或方法能否正常工作,而我们想要知道系统的各个部分组合一起是否能正常工作,这就是集成测试存在的意义。

  集成测试一般需要来自不同层的不同对象的交互,如数据库、网络连接、Ioc容器等。其实我们也经常通过运行程序,然后通过自己操作来完成类似于集成测试的流程。集成测试为我们提供了一种无须部署或运行程序来完成验证系统各部分是否能正常协作工作的能力。

  Spring通过Spring TestContext Framework对集成测试提供顶级支持。它不依赖于特定的测试框架,既可以使用Junit,也可以使用TestNG。

  基于Maven构建的项目结构默认有关测试的目录:src/test/java (测试代码)、src/test/resource(测试资源)、区别于src/main/java(项目资源)、src/main/resources(项目资源)。

  Spring提供了一个SpringJunit4ClassRunner类,它提供了Spring TestContext Framework的功能。通过@ContextConfigutaion来配置Application Context,通过@ActiveProfiles确定活动的profile。

  在使用了Spring测试后,我们前面的例子的“运行”部分都儿科与你用Spring测试来检验功能能否正常运作。



示例:

(1)准备

增加Spring测试的依赖包到Maven:

 <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>

(2)业务代码

在src/main/java下的源码:

package com.lwh.highlight_spring4.ch3.fortest;

/**
 * Created by luwenhu on 2017/9/21.
 */
//测试bean
public class TestBean {
    private String content;

    public TestBean(String content){
        super();
        this.content = content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }
}

(3)配置类

在src/main/java下的源码:

package com.lwh.highlight_spring4.ch3.fortest;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

/**
 * Created by luwenhu on 2017/9/21.
 */
//配置类
@Configuration
public class TestConfig {

    @Bean
    @Profile("dev")
    public TestBean devTestBean(){
        return new TestBean("from development profile") ;
    }

    @Bean
    @Profile("prod")
    public TestBean prodTestBean(){
        return new TestBean("from production profile");
    }
}

(4)测试

在src/test/java下源码:

import com.lwh.highlight_spring4.ch3.fortest.TestBean;
import com.lwh.highlight_spring4.ch3.fortest.TestConfig;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * Created by luwenhu on 2017/9/21.
 */
@RunWith(SpringJUnit4ClassRunner.class)//在JUnit环境下提供Spring TestContext Framework的功能
@ContextConfiguration(classes = {TestConfig.class})//@ContextConfiguration用来加载配置ApplicationContext,其中classes属性用来加载配置类
@ActiveProfiles("dev")//用来声明活动的profile
public class DemoBeanIntegrationTests {
    @Autowired//注入bean
    private TestBean testBean;

    @Test
    public void devBeanShouldInject(){
        String expected = "from development profile";
        String actual = testBean.getContent();
        Assert.assertEquals(expected,actual);
    }
}
<dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-test</artifactId>    <version>4.1.6.RELEASE</version></dependency>

<dependency>    <groupId>junit</groupId>    <artifactId>junit</artifactId>    <version>4.11</version></dependency>
时间: 2024-12-10 13:58:54

Spring 测试的相关文章

spring测试父类,使用junit-4.4.jar,spring-test.jar

@ContextConfiguration(locations = "classpath:conf/applicationContext.xml") @RunWith(SpringJUnit4ClassRunner.class) @Transactional @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) public abstr

Spring 测试框架运行

记得上一次弄Spring测试框架是两个月前,当时弄了好久也没弄出来,然后就这么样了, 今天时2016年6月28号,不知怎么就弄出来了,真是...捉摸不透. 先上链接:http://blog.csdn.net/yaerfeng/article/details/25368447,这个链接重点看后半部分就行了. 步骤: 然后,需要在相应目录下,有个配置文件,如本例中:Hello-context.xml(或者 hello-context.xml),其中hello 为测试类名,这个配置文件里包含WEB系统

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

直接使用 JUnit 测试 Spring 程序存在的不足 需要使用硬编码方式手工获取 Bean:在测试用例中,我们需要通过 ApplicationContext.getBean() 的方法从 Spirng 容器中获取需要测试的目标 Bean,并且还要进行造型操作. 数据库现场容易遭受破坏:测 试方法可能会对数据库记录进行更改操作,破坏数据库现场.虽然是针对开发数据库进行测试工作的,但如果数据操作的影响是持久的,将会形成积累效应并影响到 测试用例的再次执行.举个例子,假设在某个测试方法中往数据库插

最“高大上”的Spring测试:Spring Test

我想给大家介绍一款非常实用.且高端大气上档次的spring测试,在这里,我要强烈推荐使用Spring的Test Context框架,为什么呢?俗话说,"货比三家不上当",要搞清楚这个问题,我们先来看一看传统的Spring测试: 传统的Spring测试 我们开发一个Spring的HelloWorld. 第一步:准备开发Spring依赖的jar包 第二步:定义一个简单的POJO类:HelloWorld,如下: 第三步:阅读Spring中帮助文档(xsd-config.html),编写配置文

Spring入门(二)— IOC注解、Spring测试AOP入门

一.Spring整合Servlet背后的细节 1. 为什么要在web.xml中配置listener <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> 配置listener主要是为了捕获项目发布 | 服务器启动的契机 ,为了解析xml , 创建工厂. 这个listener是spring官方提供

spring测试出错:Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0&#39;:

解决办法 这里找不到根路径,也就找不到Spring-config.xml的配置,所以加上更改根路径的注解@WebAppConfiguration(“src/main/resources”)就解决了 1 @RunWith(SpringJUnit4ClassRunner.class) 2 @WebAppConfiguration("src/main/resources") //加上这个注解完美解决 3 @ContextConfiguration(locations = {"cla

搭建spring测试环境

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> 添加一个父类,所有测试的类继承了这个类就可以用spring的注解. i

基本spring测试框架的测试demo

以下是user 控制器的测试实例 import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import javassist.expr.NewArray; import org.hamcrest.Matchers; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; impor

使用junit进行Spring测试

这几天在做SpringMVC的项目,现在总结一下在测试的时候碰到的一些问题. 以前做项目,是在较新的MyEclipse(2013)上面进行Maven开发,pom.xml 文件是直接复制的,做测试的时候都是比较顺利的.然而这次,是在Myeclipse 8.5 上面开发,用的是JavaEE5,在测试的时候,就碰到了不少问题,有时候快被搞死! 一般来说,我们给测试类单独一个包,同时给spring一份测试的配置文件(复制production的配置文件,删除不用的组件,如 shiro,ehcache等暂时