Spring整合JUnit4测试

来源:互联网 发布:淘宝指数在哪里看 编辑:程序博客网 时间:2024/04/27 22:55

Spring整合JUnit4测试,

pom:

    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>    <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-test</artifactId>            <version>4.3.8.RELEASE</version>    </dependency> <!-- spring -->        <!-- spring -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-webmvc</artifactId>            <version>4.3.8.RELEASE</version>        </dependency>    <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-databind</artifactId>            <version>2.8.0</version>        </dependency>        <dependency>            <groupId>org.hamcrest</groupId>            <artifactId>hamcrest-core</artifactId>            <version>1.3</version>        </dependency>        <dependency>            <groupId>org.hamcrest</groupId>            <artifactId>hamcrest-parent</artifactId>            <version>1.3</version>            <type>pom</type>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context-support</artifactId>            <version>4.3.2.RELEASE</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-tx</artifactId>            <version>4.3.8.RELEASE</version>        </dependency>

代码如下:

import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import service.Say;/** * @author 01369526 * */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations="classpath*:spring/spring-context.xml")public class FirstTest {@Autowired@Qualifier("sayGoodbye")Say say;@Testpublic void say(){System.out.println(say.say());  }}

如果多个文件:

@ContextConfiguration(locations = { "classpath*:/spring1.xml", "classpath*:/spring2.xml" })   
public interface Say {public String say ();}
@Servicepublic class SayGoodbye implements Say{    /* (non-Javadoc)     * @see service.Say#say()     */    public String say() {        // TODO Auto-generated method stub        return "good bye";    }}

xml:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"    xmlns:mvc="http://www.springframework.org/schema/mvc"    xsi:schemaLocation="        http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc.xsd">    <!-- 扫描注解的包 -->    <context:component-scan base-package="controller" />    <context:component-scan base-package="service" />    <context:component-scan base-package="service.impl" /></beans>

对这个类解释一下:

@RunWith 注释标签是 Junit 提供的,用来说明此测试类的运行者,这里用了 SpringJUnit4ClassRunner,这个类是一个针对 Junit 运行环境的自定义扩展,用来标准化在 Spring 环境中 Junit4.5 的测试用例,例如支持的注释标签的标准化
@ContextConfiguration 注释标签是 Spring test context 提供的,用来指定 Spring 配置信息的来源,支持指定 XML 文件位置或者 Spring 配置类名,这里我们指定 classpath 下的 classpath*:spring/spring-context.xml为配置文件的位置
@Autowired 体现了我们的测试类也是在 Spring 的容器中管理的,他可以获取容器的 bean 的注入,您不用自己手工获取要测试的 bean 实例了

@Transactiona@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)  

@Transactional 这个非常关键,如果不加入这个注解配置,事务控制就会完全失效!
这里的事务关联到配置文件中的事务控制器(transactionManager = “transactionManager”),同时//指定自动回滚(defaultRollback = true)。这样做操作的数据才不会污染数据库! 如果有@Transactional 注释标签是表明此测试类的事务启用,这样所有的测试方案都会自动的 rollback,即您不用自己清除自己所做的任何对数据库的变更了。

原创粉丝点击