`
3806850
  • 浏览: 93929 次
  • 性别: Icon_minigender_2
  • 来自: 沈阳
社区版块
存档分类
最新评论

Spring 2.5+Junit4的单元测试(转载)

阅读更多
Spring 2.5+Junit4的单元测试
java 2010-08-26 09:46:40 阅读234 评论0   字号:大中小 订阅
要求:
      JDK1.5以上(因为Junit4是用注解来实现的)
     
需要的包
      spring-2.5.jar
      junit-4.4.jar
      spring-test.jar


测试类

package user;
import static org.junit.Assert.fail;
import java.util.Date;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.transaction.TransactionConfiguration;
import com.sample.model.user.User;
import com.sample.service.user.IUserService;

/** 设置要加载的配置文件 */
@ContextConfiguration(
  locations={
    "classpath:spring/persistenceContext.xml",    
    "classpath:spring/aopContext.xml",
    "classpath:spring/daoContext.xml",
    "classpath:spring/serviceContext.xml"  
  }   
)  
/** 设置是否回滚数据 */
@TransactionConfiguration(defaultRollback = false)
public class UserTest extends AbstractTransactionalJUnit4SpringContextTests{
 
 /** 设置自动注入的属性 */
    @Autowired  
    private IUserService userService;   
    
    
 @Before
 public void setUp() throws Exception {
 }
 
 
 @After
 public void tearDown() throws Exception {
 }
 
 @Test
 @Rollback(false)
 public void testSaveUser() {
  
  User user=new User();
  user.setUsername("zhoujun");
  user.setCreatetime(new Date());
  
  userService.saveUser(user);
  
 }
 
 
 @Test
 public void testGetUserById() {
  
  User user=userService.getUserById("1");
  
  System.out.println(user.getUsername());
  System.out.println(user.getCreatetime());
  
 }
 
 
}


有关Junit4中注解的说明如下:
@ContextConfiguration 用来指定加载的Spring配置文件的位置,会加载默认配置文件
例如下例会加载:classpath:/com/example/MyTest-context.xml文件
package com.example;

@ContextConfiguration
public class MyTest {
    // class body...
}
@ContextConfiguration 注解有以下两个常用的属性:

locations:可以通过该属性手工指定 Spring 配置文件所在的位置,可以指定一个或多个 Spring 配置文件。如下所示:
@ContextConfiguration(locations={“xx/yy/beans1.xml”,” xx/yy/beans2.xml”})
inheritLocations:是否要继承父测试用例类中的 Spring 配置文件,默认为 true。如下面的例子:
@ContextConfiguration(locations={"base-context.xml"})
public class BaseTest {
     // ...
}
@ContextConfiguration(locations={"extended-context.xml"})
public class ExtendedTest extends BaseTest {
     // ...
}
如果 inheritLocations 设置为 false,则 ExtendedTest 仅会使用 extended-context.xml 配置文件,否则将使用 base-context.xml 和 extended-context.xml 这两个配置文件。
在使用所有注释前必须使用@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境
Spring框架在
org.springframework.test.annotation
包中提供了常用的Spring特定的注解集,如果你在Java5或以上版本开发,可以在测试中使用它。
@IfProfileValue
提示一下,注解测试只针对特定的测试环境。 如果配置的ProfileValueSource类返回对应的提供者的名称值, 这个测试就可以启动。这个注解可以应用到一个类或者单独的方法。
@IfProfileValue(name=”java.vendor”, value=”Sun Microsystems Inc.”)
public void testProcessWhichRunsOnlyOnSunJvm() {
// some logic that should run only on Java VMs from Sun Microsystems
}
同时@IfProfileValue可配置一个值列表 (使用OR 语义) 来在JUnit环境中获得TestNG的测试组支持。 看下面的例子:
@IfProfileValue(name=”test-groups”, values={”unit-tests”, “integration-tests”})
public void testProcessWhichRunsForUnitOrIntegrationTestGroups() {
// some logic that should run only for unit and integration test groups
}
@ProfileValueSourceConfiguration
类级别注解用来指定当通过@IfProfileValue注解获取已配置的profile值时使用何种ProfileValueSource。 如果@ProfileValueSourceConfiguration没有在测试中声明,将默认使用SystemProfileValueSource。
@ProfileValueSourceConfiguration(CustomProfileValueSource.class)
public class CustomProfileValueSourceTests {
// class body…
}
@DirtiesContext
在测试方法上出现这个注解时,表明底层Spring容器在该方法的执行中被“污染”,从而必须在方法执行结束后重新创建(无论该测试是否通过)。
@DirtiesContext
public void testProcessWhichDirtiesAppCtx() {
// some logic that results in the Spring container being dirtied
}
@ExpectedException
表明被注解方法预期在执行中抛出一个异常。预期异常的类型在注解中给定。如果该异常的实例在测试方法执行中被抛出, 则测试通过。同样的如果该异常实例没有在测试方法执行时抛出,则测试失败。
@ExpectedException(SomeBusinessException.class)
public void testProcessRainyDayScenario() {
// some logic that should result in an Exception being thrown
}
@Timed
表明被注解的测试方法必须在规定的时间区间内执行完成(以毫秒记)。如果测试执行时间超过了规定的时间区间,测试就失败了。
注意该时间区间包括测试方法本身的执行,任何重复测试(参见 @Repeat),还有任何测试fixture的set up或tear down时间。
Spring的
@Timed
注解与JUnit 4的
@Test(timeout=...)
支持具有不同的语义。 特别地,鉴于JUnit 4处理测试执行超时(如通过在一个单独的
线程
中执行测试方法)的方式, 我们不可能在一个事务上下文中的测试方法上使用JUnit的
@Test(timeout=...)
配置。因此, 如果你想将一个测试方法配置成计时且具事务性的, 你就必须联合使用Spring的
@Timed

@Transactional
注解。 还值得注意的是
@Test(timeout=...)
只管测试方法本身执行的次数,如果超出的话立刻就会失败; 然而,
@Timed
关注的是测试执行的总时间(包括建立和销毁操作以及重复),并且不会令测试失败。
@Timed(millis=1000)
public void testProcessWithOneSecondTimeout() {
// some logic that should not take longer than 1 second to execute
}
@Repeat
表明被注解的测试方法必须重复执行。执行的次数在注解中声明。
注意重复执行范围包括包括测试方法本身的执行,以及任何测试fixture的set up或tear down。
@Repeat(10)
public void testProcessRepeatedly() {
// …
}

@Rollback
表明被注解方法的事务在完成后是否需要被回滚。 如果true,事务将被回滚,否则事务将被提交。 使用@Rollback接口来在类级别覆写配置的默认回滚标志。
@Rollback(false)
public void testProcessWithoutRollback() {
// …
}
@NotTransactional
出现该注解表明测试方法必须不在事务中执行。
@NotTransactional
public void testProcessWithoutTransaction() {
// …
}
Spring TestContext Framework还支持下面这些非特定于测试的注解,并且保持其语义不变。

@Autowired
@Qualifier
@Resource
(javax.annotation)如果JSR-250可用
@PersistenceContext
(javax.persistence)如果JPA可用
@PersistenceUnit
(javax.persistence)如果JPA可用
@Required
@Transactional
@TestExecutionListeners
定义类级别的元数据,
TestExecutionListener
s会使用
TestContextManager
进行注册。 通常,
@TestExecutionListeners

@ContextConfiguration
会搭配使用。
@ContextConfiguration
@TestExecutionListeners({CustomTestExecutionListener.class, AnotherTestExecutionListener.class})
public class CustomTestExecutionListenerTests {
    // class body...
}
@TransactionConfiguration
为配置事务性测试定义了类级别的元数据。特别地,如果需要的PlatformTransactionManager不是“transactionManager”的话, 那么可以显式配置驱动事务的
PlatformTransactionManager
的bean名字。此外, 可以将
defaultRollback
标志改为
false
。通常,
@TransactionConfiguration

@ContextConfiguration
搭配使用。
@ContextConfiguration
@TransactionConfiguration(transactionManager="txMgr", defaultRollback=false)
public class CustomConfiguredTransactionalTests {
    // class body...
}
@BeforeTransaction
表明被注解的
public void
方法应该在测试方法的事务开始之前执行, 该事务是通过
@Transactional
注解来配置的。
@BeforeTransaction
public void beforeTransaction() {
    // logic to be executed before a transaction is started
}
@AfterTransaction
表明被注解的
public void
方法应该在测试方法的事务结束之后执行, 该事务是通过
@Transactional
注解来配置的。
@AfterTransaction
public void afterTransaction() {
    // logic to be executed after a transaction has ended
}


分享到:
评论

相关推荐

    Junit4+Spring2.5单元测试代码示例(也适用注解测试)

    Junit4+Spring2.5单元测试代码示例同时也适用注解注入的形式测试(前提要导好测试的包哦,包MyEclipce自带了)

    spring3 + mybatis3 + junit4 可运行项目示例

    这个项目的核心是利用Spring作为应用的ioc(Inversion of Control,控制反转)和aop(Aspect Oriented Programming,面向切面编程)容器,MyBatis作为持久层框架,以及JUnit4用于进行单元测试和集成测试。...

    spring+mybatis+junit4单元测试

    改代码是我的我的一个项目自己写完后自测所以就写了这个junit的单元测试类,以及可能会遇到的一些问题,以及其中的一些经验,项目用的是spring + mybatis。我写的这个测试类基本概括了单元测试的基本用法,只要按照...

    spring+Junit4单元测试

    通过Spring集成单元测试,以后测试service层内容时,就不用getBean()来获得Service层对象了

    Struts2+Spring+hibernate中对action的单元测试环境搭建[总结].pdf

    在搭建单元测试环境时,需要使用的 Jar 包有 junit4.jar 和 struts2-junit-plugin-2.1.8.jar。junit4.jar 是 Eclipse 自带的,可以在项目路径中导入。struts2-junit-plugin-2.1.8.jar 是 Struts2 提供的测试插件,...

    Spring2.5+Struts1.3.8+Hibernate3.0整合

    对于每个Service层接口上的方法,可以使用JUnit进行单元测试,以确保代码的质量和稳定性。 ```java @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath*:...

    Struts1.2+Spring2.5+Hibernate3.2框架搭建(一)

    5. 测试和运行:通过JUnit进行单元测试,确保各层功能正常,然后部署应用,测试整个流程是否顺畅。 这个框架组合的优点在于,Struts处理用户请求,Spring管理业务逻辑和服务,Hibernate处理数据持久化,三者分工...

    基于Springboot+Junit+Mockito做单元测试的示例

    基于Springboot+Junit+Mockito做单元测试的示例 本文将从多个角度详细介绍如何使用Springboot、Junit和Mockito进行单元测试,并以实例代码演示。以下是本文的知识点总结: 一、单元测试的重要性 单元测试是软件...

    Structs2.0+Spring2.5+Ibatis整合例子

    6. **测试**:编写JUnit测试用例,确保在不同类型的数据库和数据源下,应用程序都能正常工作,没有数据访问或逻辑错误。 本项目作为一个整合示例,可以帮助开发者了解和学习如何在实际项目中有效地组合使用Struts2...

    Spring+JUnit4 +Ant测试报告

    总之,Spring+JUnit4+Ant的组合为Java开发提供了强大的单元测试能力。通过合理配置和使用这些工具,开发者可以更高效地进行测试,保证代码质量,降低维护成本。在压缩包文件"junitTest"中,可能包含了示例的测试代码...

    spring4+JUnit简单测试

    总的来说,Spring4提供了丰富的测试支持,结合JUnit能够实现从单元测试到集成测试的全面覆盖。这不仅提高了代码质量,也加速了问题定位和修复的过程。在实际开发中,应充分利用这些工具,确保软件的健壮性和稳定性。...

    Spring2.5 + JPA(Hibernate)实现

    7. **测试**:在开发过程中,使用如Hibernate Tools的逆向工程生成数据库脚本,以及使用JUnit和Mockito进行单元测试是常见的实践。 通过标签“源码”和“工具”,我们可以推断这个主题可能包含了实际的代码示例和...

    junit5.rar包含JUnit Platform + JUnit Jupiter + JUnit Vintage依赖jar包

    JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage,包含依赖包:junit-jupiter-5.5.1.jar,junit-jupiter-engine-5.5.1.jar,junit-jupiter-params-5.5.1.jar,junit-platform-launcher-1.5.1.jar,junit-...

    整合struts2+spring2.5+ibatis

    **Spring2.5** 是一个全面的企业级应用框架,它的核心特性是依赖注入(DI),这使得对象之间的关系可以在运行时动态配置,提高了代码的可测试性和可维护性。此外,Spring2.5还引入了AOP(面向切面编程),允许开发者...

    Spring2.5+Structs2+Hibernate3.3框架例子

    5. **测试代码**:可能有JUnit测试类,用于验证框架配置和业务逻辑的正确性。 通过这个例子,初学者可以学习到如何整合这三个框架,理解它们在实际开发中的作用,以及如何通过配置文件来控制应用程序的行为。同时,...

    测试+JUnit+单元测试+学习

    JUnit是Java编程语言中广泛使用的单元测试框架,对于开发者来说,掌握JUnit的使用是提高工作效率和保证代码质量的关键步骤。本资源将带你深入学习JUnit及其在单元测试中的应用。 单元测试是对软件中的最小可测试...

    maven+spring+mybatis+mysql+junit jar项目框架搭建

    总结起来,"maven+spring+mybatis+mysql+junit jar项目框架搭建"是一个完整的Java后端开发流程,涵盖了从项目构建、服务层、数据访问层到数据库管理和单元测试的全过程。这样的框架为开发者提供了一个高效、稳定且...

    测试+JUnit+单元测试+学习阶段

    JUnit作为Java领域最流行的单元测试框架,是开发者必备的工具之一。本学习阶段将带你深入理解和掌握JUnit的使用,以及如何通过单元测试来提升代码质量。 首先,我们需要了解什么是单元测试。单元测试是对软件中的...

    Spring+Jotm+Hibernate+Oracle+Junit 实现JTA分布式事务要求Demo工程

    3.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 (特别注意:Spring3.0里不在提供对jotm的封装,spring-tx里没有JotmFactoryBean.class,我在jar里添加了类) 2)Demo 导入说明: 1.Eclipse ...

    spring+springmvc+mybatis+maven+junit整合

    【JUnit】是Java语言的一个单元测试框架,它使开发者可以方便地编写和运行可重复的测试,确保代码的正确性和稳定性。在集成开发环境中,JUnit测试通常与持续集成工具一起使用,以保证每次代码更改后都能进行自动测试...

Global site tag (gtag.js) - Google Analytics