`
yun342173024
  • 浏览: 74123 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring 测试框架

 
阅读更多
以前单纯用junit做spring的测试程序,在测dao的时候总是得手动的添加或删除记录,破坏了数据库现场,用spring的测试框架可以在测试用例执行完后回滚。

使用spring框架测试   

引入spring测试的jar包(这里我用的是spring 3.0.3)
  org.springframework.test-3.0.3.RELEASE.jar 
  cglib-2.2.2.jar  
实体类

package com.jysd.bean;

import java.util.Date;
	
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import com.jysd.web.bean.ArticleActionParamBean;
@Entity
@Table(name="t_article")
public class Article {
     //主键
	 private long id;
	 //板块
	 private Catagory catagory; 
	 //主题
	 private String topic;
	 //文章内容
	 private String content;
	 //发布日期
	 private Date publis_date;
	 //文章作者
	 private User u;
	 /**
	  * 默认构造函数
	  */
	 public Article(){
		 
	 }
	 
	 /**
	  * 
	  * @param articleParambean 页面参数对象    
	  */
	 public Article(ArticleActionParamBean articleParambean){
	        Catagory catagory = new Catagory();
	        catagory.setId(Long.parseLong(articleParambean.getCatagory_id()));
	        this.catagory = catagory;
	        this.content = articleParambean.getContent();
	        this.topic = articleParambean.getTopic();
	        User u = new User();
	        u.setId(Long.parseLong(articleParambean.getUser_id()));
	        this.u = u;
	        Date d = new Date();
	        this.publis_date = d;
	 }
	 
	 
	 @Id
	 @GeneratedValue
	 public long getId() {
		return id;
	 }
	public void setId(long id) {
		this.id = id;
	}
	
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="catagory_id")
	
	public Catagory getCatagory() {
		return catagory;
	}
	public void setCatagory(Catagory catagory) {
		this.catagory = catagory;
	}
	public String getTopic() {
		return topic;
	}
	public void setTopic(String topic) {
		this.topic = topic;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	@Column(name="publish_date")
	@Temporal(TemporalType.TIMESTAMP)
	public Date getPublis_date() {
		return publis_date;
	}
	public void setPublis_date(Date publisDate) {
		publis_date = publisDate;
	}
 
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="userid")
	public User getU() {
		return u;
	}

	public void setU(User u) {
		this.u = u;
	}

}


dao实现类

package com.jysd.dao.impl;

import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;

import javax.persistence.Query;


import org.springframework.stereotype.Repository;

import com.jysd.bean.Article;
import com.jysd.dao.ArticleDao;
import com.jysd.exception.DataBaseException;

import com.jysd.ms.web.QueryResult;

@Repository 
public class ArticleDaoImpl extends BaseDaoImpl<Article> implements ArticleDao  {

	/**
	 * 功能:列出最近发表的文章
	 */
	public List<Article> listArticle(int displayCount,long catagory_id)throws DataBaseException {
		// TODO Auto-generated method stub
		
		/*LinkedHashMap<String,String> orderBy = new LinkedHashMap<String,String>();
		orderBy.put("publis_date","desc");
		QueryResult<Article> queryResult = this.getScrollData(0,displayCount,"where", queryParams, orderby)
		return queryResult.getResultlist();*/
		
		String hql = "select article from com.jysd.bean.Article as article where article.catagory.id=:id";
		Query query = em.createQuery(hql).setFirstResult(0).setMaxResults(displayCount).setParameter("id",catagory_id);
		return query.getResultList();  
	 }
    
	/**
	 * 功能:向数据库存储文
	 */
	
	public void saveArticle(Article article) throws DataBaseException {
		
		em.persist(article);
	}


测试类  

package com.jysd.dao.impl;

import java.util.List;

import javax.annotation.Resource;

import junit.framework.Assert;


import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

import com.jysd.bean.Article;
import com.jysd.bean.Catagory;
import com.jysd.bean.User;
import com.jysd.dao.ArticleDao;

import com.jysd.exception.DataBaseException;

@RunWith(SpringJUnit4ClassRunner.class)
//加载spring配置文件
@ContextConfiguration(locations={"classpath:bean.xml"})


public class ArticleDaoImplTest  {
    
	@Resource(name="articleDaoImpl")
	private  ArticleDao articleDao;
	
    
	@Transactional //这个测试用例在一个事物中执行,执行完回回滚不会破坏数据库
	
	public void testPostArticle() throws DataBaseException{
		
		Article article = new Article();
		article.setTopic("数据回滚");
		article.setContent("学习spring测试");
		User u = new User();
		u.setId(1l);
		article.setU(u);
		Catagory cata = new Catagory();
		cata.setId(1l);
		article.setCatagory(cata);
		articleDao.saveArticle(article);
	}
	
	
}
  

bean.xml 如下
   <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:tx="http://www.springframework.org/schema/tx" 
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="  
             http://www.springframework.org/schema/beans 
             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
             http://www.springframework.org/schema/context
        	 http://www.springframework.org/schema/context/spring-context-3.0.xsd
             http://www.springframework.org/schema/aop 
             http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
             http://www.springframework.org/schema/tx 
             http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" >
 <aop:aspectj-autoproxy/>
	<context:component-scan base-package="com"/>		
   <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
 		<property name="persistenceUnitName" value="bjjysd"/>
   </bean>
   <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
   </bean>  
   <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
 

在运行这个测试用例,数据就不会保存在数据库中了,当然这只是spring测试框架的一部分,希望对你学习有所帮助。



分享到:
评论

相关推荐

    Spring测试框架.rar

    Spring测试框架是Spring生态系统中的重要组成部分,它为开发者提供了对Spring应用进行单元测试、集成测试以及端到端测试的强大支持。这个压缩包“Spring测试框架.rar”包含了与使用Spring 2.5 TestContext测试框架...

    Spring+hibernate 单元测试

    Spring 2.5 版本引入了一个全新的基于注解的测试框架——TestContext,该框架与之前的测试框架相比有着显著的区别。TestContext 测试框架不再依赖于特定的测试基类,而是采用了更加灵活的注解方式来定义测试行为,这...

    spring-mock.jar

    spring测试框架

    Spring框架开发参考中文手册

    《Spring框架开发参考中文手册》是一本专门为Java开发者设计的指南,旨在帮助他们深入理解和熟练运用Spring框架进行软件开发。Spring作为Java企业级应用开发的主流框架,以其强大的功能、灵活的设计和广泛的社区支持...

    Spring_TestContext测试框架

    Spring TestContext测试框架是Spring框架的一部分,专为简化和增强对Spring应用程序的测试而设计。这个框架提供了一种结构化的方式来加载和管理Spring的ApplicationContext,并在测试环境中支持诸如事务管理和配置...

    spring junit

    Spring测试框架支持使用`@MockBean`和`@SpyBean`来创建模拟对象,这在隔离测试和避免数据库交互时非常有用。`@MockBean`创建完全模拟的对象,而`@SpyBean`则允许部分模拟,可以监控真实对象的行为。 4. **事务管理...

    Spring.NET框架参考文档

    Spring.NET框架是一个面向.NET平台的企业级应用程序开发框架,它借鉴了Java界的Spring框架,并将其核心概念和功能移植到了.NET环境中。这个框架的主要目标是简化.NET应用程序的开发,提高可测试性和可维护性,同时...

    使用 Spring 2.5 TestContext 测试框架

    在Spring框架中,TestContext模块为开发者提供了强大的测试支持,特别是在Spring 2.5版本中,这个测试框架进一步增强了测试的便利性和可扩展性。它允许我们以声明式的方式配置和管理测试环境,包括bean的初始化、...

    spring框架快速入门

    - **易于测试**:Spring框架支持独立的单元测试和集成测试,使得开发者能够方便地进行各种类型的测试。 - **AOP的支持**:Spring框架支持面向切面编程,可以在不修改业务逻辑代码的情况下添加新的功能,如日志记录、...

    spring框架帮助文档

    另外,Spring框架还提供了强大的测试支持,包括单元测试和集成测试框架,使得开发者能够在不同层次上对应用程序进行测试,确保代码质量。 Spring的文件“spring.chm”很可能包含了所有这些特性的详细说明,包括API...

    Spring框架参考手册

    - 对测试框架进行了增强,提高了测试效率。 #### 四、Spring框架4.1的新特性和增强 - **4.1 JMS改进** - 增强了Java消息服务(JMS)支持。 - **4.2 缓存改进** - 改进了缓存管理功能,增加了更多缓存策略和API...

    android的spring框架

    Spring for Android是Spring.io针对Android平台推出的一个框架,旨在帮助开发者构建高质量、可测试和模块化的应用程序。下面将详细介绍Spring框架在Android中的应用和相关知识点。 1. **依赖注入(DI)** Spring框架...

    Spring Professional Certification Study Guide

    8. **测试**:讲解Spring测试框架,包括单元测试、集成测试和Mockito的使用。 9. **安全**:讨论Spring Security,包括身份验证、授权、CSRF保护和OAuth2集成。 10. **Spring Cloud**:如果涉及,可能会涵盖Spring...

    spring mvc + spring + hibernate 全注解整合开发视频教程 12

    6. 使用Spring测试框架进行单元测试和集成测试。 通过学习本教程,你将能够熟练地运用这三大框架进行全注解的整合开发,从而提高开发效率,打造出高质量的Java Web应用。无论你是初学者还是有经验的开发者,这个...

    spring框架外文文献.docx

    5. **测试**:Spring提供了测试框架支持,包括模拟对象、测试上下文框架和对单元测试和集成测试的工具,以简化应用的测试工作。 6. **工具**:Spring工具集支持IDE集成,提供了一种更高效的方式来开发Spring应用...

    Spring整合Junit框架进行单元测试Demo

    Spring是一个开源的、全面的企业级应用框架,它简化了开发复杂应用的过程,而JUnit则是一个流行的单元测试框架,用于确保代码的质量和可靠性。当我们需要对Spring框架中的组件进行单元测试时,通常会将JUnit与Spring...

    Spring框架学习笔记

    八、Spring测试 Spring提供了丰富的测试支持,包括单元测试和集成测试。它允许在测试环境中轻松创建和配置Bean,方便进行模拟对象和依赖注入。 九、Spring Boot Spring Boot是基于Spring框架的快速开发工具,它简化...

Global site tag (gtag.js) - Google Analytics