【Spring】Spring高级话题-测试Spring项目

转载请注明出处:http://blog.csdn.net/qq_26525215

本文源自大学之旅_谙忆的博客

进行本示例的演示,需要先配置好Maven和Spring哦、
见:
【Spring】基于IntelliJ IDEA搭建Maven

分析

测试是开发工作中不可缺少的部分。

单元测试只针对当前开发的类和方法进行测试,可以简单通过模拟依赖来实现,对运行环境没有依赖;

但是仅仅进行单元测试是不够的,它只能验证当前类或当前方法能否正常工作,而我们想要知道系统的各个部分组合在一起是否能正常工作,这就是集成测试存在的意义!

集成测试一般需要来自不同层的不同对象的交互,如数据库、网络连接、Ioc容器等。

其实我们也经常通过运行程序,然后通过自己操作来完成类似于集成测试的流程。集成测试为我们提供了一种无须部署或运行程序来完成验证系统各部分是否能正常协同工作的能力。

Spring通过Spring TestContext Framework 对集成测试提供顶级支持。

它不依赖于特定的测试框架,即可使用Junit,也可使用TestNG。
在下面的示例中,使用的是Junit。

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

Spring提供了一个SpringJunitClassRunner类,它提供了Spring TestContext Framework的功能。

通过@ContextConfiguration来配置Application Context,通过@ActiveProfiles确定活动的profile。

在使用了Spring测试后,之前我的博客写的运行类,也就是运行部分都可以使用Spring测试来检测功能能否正常运作。

集成测试涉及程序中的各个分层,本节只对简单配置的Application Context和在测试中注入Bean做演示。

示例

准备

首先,我们需要准备一下,增加Spring测试的依赖包到Maven。
也就是加入到pom.xml中去。

<!--Spring test 支持 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.2.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

业务代码

此源码在src/main/java下

package cn.hncu.p3.p7_fortest;

/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2016/12/9.
 * Time: 下午 9:21.
 * Explain:业务代码
 */
public class TestBean {
    private String content;

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

    public String getContent() {
        return content;
    }

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

配置类

此源码在src/main/java下

package cn.hncu.p3.p7_fortest;

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

/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2016/12/9.
 * Time: 下午 9:23.
 * Explain:配置类
 */
@Configuration
public class TestConfig {
    @Bean
    @Profile("dev")
    public TestBean devTestBean(){
        return new TestBean("development profile");
    }

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

测试

注意!此源码在src/test/java下

package cn.hncu.p3.p7_fortest;

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 with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2016/12/9.
 * Time: 下午 9:27.
 * Explain:测试类---源码在src/test/java下
 */
@RunWith(SpringJUnit4ClassRunner.class)//在SpringJUnit4ClassRunner在Junit环境下提供Spring TextContext Framework的功能
@ContextConfiguration(classes = {TestConfig.class})//@ContextConfiguration用来加载配置ApplicationContext,其中classes属性用来加载配置类
@ActiveProfiles("prod")
public class DemoBeanIntegrationTests {
    @Autowired//可以使用普通的@Autowired注入Bean
    private TestBean testBean;

    @Test//测试代码,通过Junit的Assert来校验结果是否和预期的一样
    public void prodBeanShouldInject(){
        String expected = "production profile";
        String actual = testBean.getContent();
        System.out.println(actual);
        Assert.assertEquals(expected,actual);//用来查看对象中存的值是否是期待的值,与字符串比较中使用的equals()方法类似;
    }
}

运行结果

我们现在改一下测试类

将此处的

@ActiveProfile(“prod”)改为@ActiveProfile(“dev”)
只改此处。

看运行结果:

这是测试不能通过的结果!

会有红色警示!

此为项目源码链接,点击进入

本文章由[谙忆]编写, 所有权利保留。

转载请注明出处:http://blog.csdn.net/qq_26525215

本文源自大学之旅_谙忆的博客

时间: 2016-12-10

【Spring】Spring高级话题-测试Spring项目的相关文章

3.Spring高级话题—1.Spring Aware

1.点睛Spring的依赖注入的最大亮点就是你所有的Bean对Spring容器的存在是没有意识的.即你可以将你的容器替换成别的容器,如Google Guice,这时Bean之间的耦合度很低.但是在实际项目中,你不可避免的要用到Spring容器本身的功能资源,这时你的Bean必须意识到Spring容器的存在,才能调用Spring所提供的资源,这就是所谓的Spring Aware.其实Spring Aware本来就是Spring设计用来框架内部使用的,若使用了Spring Aware,你的Bean将

【Spring】Spring高级话题-@Enable***注解的工作原理

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] @EnableAspectJAutoProxy @EnableAspectJAutoProxy注解 激活Aspect自动代理 <aop:aspectj-autoproxy/> 开启对AspectJ自动代理的支持. 在用到AOP的自动代理的时候用,如果你理解了Java的动态代理,很容易的就会熟悉AOP的自动代理的. @EnableAsync @EnableAsync注解开启异步方法

【Spring】Spring高级话题-Spring Aware

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 分析 Spring的依赖注入的最大亮点就是你所有的Bean对Spring容器的存在是没有意识的. 也就是说,你可以把你的容器换成别的容器,如Google Guice,这时Bean之间的耦合度很低. 但是在实际项目中,基本上不可避免的要用到Spring容器本身的功能资源,这时你的Bean必须要意识到Spring容器的存在,才能调用Spring所提供的资源,这就是所谓的Spring A

【Spring】Spring高级话题-计划任务-@EnableScheduling

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 进行本示例的演示,需要先配置好Maven和Spring哦. 见: [Spring]基于IntelliJ IDEA搭建Maven 分析 要实现计划任务,首先通过在配置类注解@EnableScheduling来开启对计划任务的支持,然后在要执行计划任务的方法上注解@Scheduled,声明这是一个计划任务. Spring通过@Scheduled支持多种类型的计划任务,包含cron.fi

【Spring】Spring高级话题-组合注解与元注解

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 进行本示例的演示,需要先配置好Maven和Spring哦. 见: [Spring]基于IntelliJ IDEA搭建Maven 分析 所谓的元注解: 其实就是可以注解到别的注解上的注解. 而被注解的注解我们就称之为组合注解.(仔细理解,可能有点绕) 组合注解同时具备元注解的功能! Spring的很多注解都可以作为元注解,而且Spring本身已经有很多组合注解. 组合注解的好处: 简

【Spring】Spring高级话题-条件注解-@Condition

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 进行本示例的演示,需要先配置好Maven和Spring哦. 见: [Spring]基于IntelliJ IDEA搭建Maven 分析 在前面的一篇博客中:[Spring]Spring常用配置-Profile 通过profile,我们可以获得不同的profile,我们可以获得不同的Bean.Spring4提供了一个更通用的基于条件的Bean的创建,即使用@Condition注解. @

使用Spring Boot和Gradle创建AngularJS项目

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 本文主要是记录使用 Spring Boot 和 Gradle 创建项目的过程,其中会包括 Spring Boot 的安装及使用方法,希望通过这篇文章能够快速搭建一个项目. 1. 开发环境 操作系统: mac JDK:1.7.0_60 Gradle:2.2.1 IDE:Idea 2. 创建项目

使用Spring Boot来加速Java web项目的开发

我想,现在企业级的Java web项目应该或多或少都会使用到Spring框架的.   回首我们以前使用Spring框架的时候,我们需要首先在(如果你使用Maven的话)pom文件中增加对相关的的依赖(使用gradle来构建的话基本也一样)然后新建Spring相关的xml文件,而且往往那些xml文件还不会少.然后继续使用tomcat或者jetty作为容器来运行这个工程.基本上每次创建一个新的项目都是这么一个流程,而我们有时候仅仅想快速的创建一个Spring web工程来测试一些东西,或者是希望能节

Spring Boot应用的测试——Mockito

Spring Boot可以和大部分流行的测试框架协同工作:通过Spring JUnit创建单元测试:生成测试数据初始化数据库用于测试:Spring Boot可以跟BDD(Behavier Driven Development)工具.Cucumber和Spock协同工作,对应用程序进行测试. 进行软件开发的时候,我们会写很多代码,不过,再过六个月(甚至一年以上)你知道自己的代码怎么运作么?通过测试(单元测试.集成测试.接口测试)可以保证系统的可维护性,当我们修改了某些代码时,通过回归测试可以检查是