以前单纯用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测试框架是Spring生态系统中的重要组成部分,它为开发者提供了对Spring应用进行单元测试、集成测试以及端到端测试的强大支持。这个压缩包“Spring测试框架.rar”包含了与使用Spring 2.5 TestContext测试框架...
Spring 2.5 版本引入了一个全新的基于注解的测试框架——TestContext,该框架与之前的测试框架相比有着显著的区别。TestContext 测试框架不再依赖于特定的测试基类,而是采用了更加灵活的注解方式来定义测试行为,这...
spring测试框架
《Spring框架开发参考中文手册》是一本专门为Java开发者设计的指南,旨在帮助他们深入理解和熟练运用Spring框架进行软件开发。Spring作为Java企业级应用开发的主流框架,以其强大的功能、灵活的设计和广泛的社区支持...
Spring TestContext测试框架是Spring框架的一部分,专为简化和增强对Spring应用程序的测试而设计。这个框架提供了一种结构化的方式来加载和管理Spring的ApplicationContext,并在测试环境中支持诸如事务管理和配置...
Spring测试框架支持使用`@MockBean`和`@SpyBean`来创建模拟对象,这在隔离测试和避免数据库交互时非常有用。`@MockBean`创建完全模拟的对象,而`@SpyBean`则允许部分模拟,可以监控真实对象的行为。 4. **事务管理...
Spring.NET框架是一个面向.NET平台的企业级应用程序开发框架,它借鉴了Java界的Spring框架,并将其核心概念和功能移植到了.NET环境中。这个框架的主要目标是简化.NET应用程序的开发,提高可测试性和可维护性,同时...
在Spring框架中,TestContext模块为开发者提供了强大的测试支持,特别是在Spring 2.5版本中,这个测试框架进一步增强了测试的便利性和可扩展性。它允许我们以声明式的方式配置和管理测试环境,包括bean的初始化、...
- **易于测试**:Spring框架支持独立的单元测试和集成测试,使得开发者能够方便地进行各种类型的测试。 - **AOP的支持**:Spring框架支持面向切面编程,可以在不修改业务逻辑代码的情况下添加新的功能,如日志记录、...
另外,Spring框架还提供了强大的测试支持,包括单元测试和集成测试框架,使得开发者能够在不同层次上对应用程序进行测试,确保代码质量。 Spring的文件“spring.chm”很可能包含了所有这些特性的详细说明,包括API...
- 对测试框架进行了增强,提高了测试效率。 #### 四、Spring框架4.1的新特性和增强 - **4.1 JMS改进** - 增强了Java消息服务(JMS)支持。 - **4.2 缓存改进** - 改进了缓存管理功能,增加了更多缓存策略和API...
Spring for Android是Spring.io针对Android平台推出的一个框架,旨在帮助开发者构建高质量、可测试和模块化的应用程序。下面将详细介绍Spring框架在Android中的应用和相关知识点。 1. **依赖注入(DI)** Spring框架...
8. **测试**:讲解Spring测试框架,包括单元测试、集成测试和Mockito的使用。 9. **安全**:讨论Spring Security,包括身份验证、授权、CSRF保护和OAuth2集成。 10. **Spring Cloud**:如果涉及,可能会涵盖Spring...
6. 使用Spring测试框架进行单元测试和集成测试。 通过学习本教程,你将能够熟练地运用这三大框架进行全注解的整合开发,从而提高开发效率,打造出高质量的Java Web应用。无论你是初学者还是有经验的开发者,这个...
5. **测试**:Spring提供了测试框架支持,包括模拟对象、测试上下文框架和对单元测试和集成测试的工具,以简化应用的测试工作。 6. **工具**:Spring工具集支持IDE集成,提供了一种更高效的方式来开发Spring应用...
Spring是一个开源的、全面的企业级应用框架,它简化了开发复杂应用的过程,而JUnit则是一个流行的单元测试框架,用于确保代码的质量和可靠性。当我们需要对Spring框架中的组件进行单元测试时,通常会将JUnit与Spring...
八、Spring测试 Spring提供了丰富的测试支持,包括单元测试和集成测试。它允许在测试环境中轻松创建和配置Bean,方便进行模拟对象和依赖注入。 九、Spring Boot Spring Boot是基于Spring框架的快速开发工具,它简化...