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

Spring DAO层的测试AbstractTransactionalDataSourceSpringContextTests

阅读更多

1. Spring DAO层的测试AbstractTransactionalDataSourceSpringContextTests
2. spring2.5, 不知道为什么Junit4的风格用不了!!

Spring的DAO层的测试,我是通过继承AbstractTransactionalDataSourceSpringContextTests来做的。比较简单,而且又支持回滚,没有数据库的耗时操作,又是spring-test.jar发布包里直接支持的,所以就选个了。

代码实现也很简单,我先定义了一个base类,其他的测试类全部都继承这个base类,就更方便控制了。

public class BaseDAOTestCase extends AbstractTransactionalDataSourceSpringContextTests {
 
protected final static Log log = LogFactory.getLog(BaseDAOTestCase.class);
 
@Override
public String[] getConfigLocations() {
setAutowireMode(AUTOWIRE_BY_TYPE);
return new String[] { "classpath:/test-*-beans.xml", "classpath:/test-*-beans.xml" };
}
}

实现test的类:

package com.dvs.biz.dao.ibatis;
 
import java.util.List;
 
import org.junit.Before;
import org.junit.Test;
 
import com.dvs.biz.dao.UserDAO;
import com.dvs.biz.model.User;
import com.dvs.common.dao.ibatis.BaseDAOTestCase;
/**
*
* Now, Junit 3.8.1 version.
*
* But I hope everyone can also follow Junit4 coding style
*
*/
public class UserDAOIbatisTest extends BaseDAOTestCase {
 
private UserDAO userDao;
private User user;
private Integer pk;
private Integer pk2 = new Integer(1137799366);
 
public void setUserDAO(UserDAO userDao) {
this.userDao = userDao;
}
 
public UserDAOIbatisTest() {
pk = 12345678;
user = new User();
user.setAddress("aa");
user.setAge(12);
user.setPassword("aa");
user.setPk(pk);
user.setUsername("aa");
}
 
@Before
public void init() {
}
 
@Test
public void testGetList() {
try {
List list = userDao.getList();
User user1 = (User) list.get(0);
assertNotNull(user1.getPk());
} catch (Exception e) {
e.printStackTrace();
}
}
 
}

这个东西特别奇怪,spring2.5已经明确说了支持junit 4.4, 可是这个类里面写的 @Before, @Test就是没有作用。在spring中文论坛也问了,目前还没有反应呢。!!!

我查了spring的源代:

我的类叫BaseTest
extends AbstractTransactionalDataSourceSpringContextTests
extends AbstractTransactionalSpringContextTests
extends AbstractDependencyInjectionSpringContextTests
extends AbstractSingleSpringContextTests
extends AbstractSpringContextTests
extends ConditionalTestCase
extends TestCase

----------------

下边是ConditionalTestCase类的开头。

package org.springframework.test;
 
import junit.framework.TestCase;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
/**
* Superclass for JUnit 3.8 based tests that allows conditional test execution
* at the individual test method level. The
* {@link #isDisabledInThisEnvironment(String) isDisabledInThisEnvironment()}
* method is invoked before the execution of each test method. Subclasses can
* override that method to return whether or not the given test should be
* executed. Note that the tests will still appear to have executed and passed;
* however, log output will show that the test was not executed.
*
* @author Rod Johnson
* @since 2.0
* @see #isDisabledInThisEnvironment
*/
public abstract class ConditionalTestCase extends TestCase {

===================

上面写着,Superclass for JUnit 3.8 based tests 。请问这个是什么问题啊,是bug吗?还是怎么回事!!

我的在程序里的junit4.4规范代码运行不了,3.8规范的代码是OK.

--------------------------------------------------------------------------------------------------------

自己回复一下吧,找到解决办法了。

spirng2.5不用上面的类了,按下以下的形式,可以做junit4.4的单元测试了。

package com.dvs.common.dao.ibatis;
 
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
 
/**
*
* @author Conan
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/test-*-beans.xml" })
@TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
@Transactional
public class BaseDAOTestCaseJunit44 {
 
}

还有一个是子类:

package com.dvs.biz.dao.ibatis;
 
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
 
import java.util.List;
 
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
 
import com.dvs.biz.dao.UserDAO;
import com.dvs.biz.model.User;
import com.dvs.common.dao.ibatis.BaseDAOTestCaseJunit44;
 
/**
*
* @author Conan
*
*/
public class UserDAOIbatisTest extends BaseDAOTestCaseJunit44{
 
private UserDAO userDao;
private User user;
private Integer pk;
private Integer pk2 = new Integer(123);
 
@Autowired
public void setUserDAO(UserDAO userDao) {
this.userDao = userDao;
}
 
public UserDAOIbatisTest() {
pk = 1212;
user = new User();
user.setAddress("aa");
user.setAge(12);
user.setPassword("aa");
user.setPk(pk);
user.setUsername("12");
}
 
@Before
public void init() {
}
 
@Test
public void getList() {
try {
List list = userDao.getList();
User user1 = (User) list.get(0);
assertNotNull(user1.getPk());
} catch (Exception e) {
e.printStackTrace();
}
}
 
}


这样子就完成了,从Junit3.8向Junit4.4的转变。

 

分享到:
评论

相关推荐

    Spring Dao层设计

    Spring 数据库访问的支持。包括统一异常体系和Spring的Template+CallBack的解读

    SpringBoot 多模块Dao层单元测试

    3. **编写Dao层测试** 在Dao层模块下创建对应的测试类,例如`UserDaoTest.java`。这里我们可以使用Mockito来创建Dao层所依赖的数据源的模拟对象,避免在测试中实际访问数据库。测试类示例: ```java import org....

    利用JUnit和Spring-test对SpringJDBC组件DAO层测试

    本话题将深入讲解如何利用JUnit和Spring-test这两个工具对SpringJDBC组件的DAO层进行有效测试。 首先,JUnit是一个流行的Java单元测试框架,它允许开发者编写可重复运行的测试用例,以验证代码的正确性。在针对...

    Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合

    本文主要探讨Spring如何贯穿整个中间层,将Web层、Service层、DAO层以及PO(Plain Old Java Object)无缝整合起来。 #### 二、Spring框架的关键作用 1. **无缝整合**:Spring框架的一个显著特点是能够将不同的技术...

    Spring DAO

    Spring框架提供了一套强大的数据访问抽象层——DAO(Data Access Object)支持,使得开发者能够在不关心具体数据库技术细节的情况下完成数据访问任务。这一机制极大地简化了开发过程,降低了代码的耦合度,并提高了...

    ifunsu封装基于springjdbc的dao层

    ifunsu封装基于springjdbc的dao层,具体用法请看本站博客http://blog.csdn.net/ifunsu 。

    使用junit测试ssh中的dao

    2. **创建测试类**:创建一个继承自Spring的AbstractTransactionalDataSourceSpringContextTests的测试类,这个类提供了事务管理,并自动回滚事务,防止测试对数据库产生副作用。 3. **注入依赖**:使用Spring的@...

    junit测试spring,hibernate的dao层代码

    将 `JUnit` 与 `Spring`、`Hibernate` 结合使用,可以对 `DAO(Data Access Object)` 层进行有效的测试,确保数据访问逻辑的正确性。 首先,`DAO` 层是业务逻辑和数据库操作之间的隔离层,通常包含了增删改查等...

    spring boot服务器dao层实例化.rar_dao实例化_idea 实例ID_spring boot_spring b

    DAO层的设计和实现对于任何应用程序来说都是至关重要的,因为它提供了数据存储和检索的抽象,使得业务逻辑与数据操作相分离,提高了代码的可维护性和可测试性。本实例将探讨如何在Spring Boot中实例化DAO层,并使用...

    SpringDao模式实例

    8. **Unit Testing**: Spring提供了一些工具,如`@TransactionalTest`注解和`MockMvc`,方便对DAO层进行单元测试,确保代码质量。 在实际应用中,Spring DAO模式的实现通常会结合使用上述组件,通过配置文件(XML或...

    Service层和DAO层解析

    Spring框架通过依赖注入(Dependency Injection,DI)实现了这一目标,使得Service层可以通过接口引用DAO层的实现,而不是直接创建DAO实例。这增强了系统的可测试性和可扩展性,因为Service层可以通过配置文件或注解...

    ifunsu封装基于springjdbc的dao层api

    标题"ifunsu封装基于springjdbc的dao层api"指的是一个特定的项目或库,名为ifunsu,它已经对Spring JDBC进行了封装,以创建更易用的数据访问对象(DAO)层API。DAO层是应用程序中负责与数据库进行交互的部分,通常...

    strut2+spring+ibatis 的ation层,service层,dao层自动生成,简单易用

    Struts2、Spring和iBatis是Java Web开发中常用的三大框架,它们分别负责MVC模式中的Action层、业务逻辑层(Service层)以及数据访问层(DAO层)。本项目提供的是一款工具,能够自动化生成这三层的代码,极大地提高了...

    dao.rar_spring-dao

    标题中的"dao.rar_spring-dao"暗示了这个压缩包可能包含了与Spring DAO层相关的源代码或资源。DAO(Data Access Object)模式是Java开发中常用的一种设计模式,用于封装对数据库的操作,使得业务逻辑层与数据访问层...

    Spring对DAO的支持.doc

    - **数据传递对象(DTO/VO)**:封装业务数据的JavaBean类,用于在DAO和业务层之间传递信息。 例如,`PersonBean`作为DTO,`PersonDao`作为DAO接口,`PersonDaoImpl`作为DAO实现类。`PersonBean`包含了`id`, `name`...

    使用Spring实现DAO模式

    通过这种方式,上层的应用程序可以无需直接处理复杂的数据库操作,只需调用DAO层提供的接口即可完成数据交互。 #### 2. Spring框架的支持 Spring框架提供了丰富的特性来支持DAO模式的实现,包括但不限于: - **...

    Mybatis_SpringDao

    - Mybatis_SpringDao可能包含以下文件:Spring的配置文件(如 applicationContext.xml),Mybatis的配置文件(mybatis-config.xml),Mapper接口,对应的XML映射文件,以及测试类等。 总的来说,Mybatis_Spring...

    07. Spring Boot单元测试

    对于Repository或DAO层,可以使用`@DataJpaTest`或`@Sql`注解来执行数据库相关的测试。`@DataJpaTest`会启动一个内存数据库,自动配置JPA,方便测试数据存取。`@Sql`则允许我们运行SQL脚本来设置测试前的数据状态。 ...

    Spring3 JDBC 通用DAO封装2 dao层终于完成dao层大概上传完整代码

    使用JUnit和Spring Test进行单元测试,验证DAO层的功能正确性。 通过上述步骤,我们可以构建一个高效、可复用的Spring3 JDBC通用DAO层。在实际项目中,可以结合Spring的其他功能,如MyBatis、Hibernate等ORM框架,...

Global site tag (gtag.js) - Google Analytics