`
bjtale
  • 浏览: 29741 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

使用Junit4为mybatis的DAO类写测试用例

阅读更多

mybatis是一款很不错的ORM框架,在项目中得到了很多应用。为了规范单元测试的习惯,特地基于Junit4为DAO层写了测试用例。基础测试从单表开始,数据表基本DDL为:

Create TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userName` varchar(50) DEFAULT NULL,
  `userAge` int(11) DEFAULT NULL,
  `userAddress` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`)
) 

 在实际写DAO层单元测试用例时,工程仅需要hamcrest-core,junit-4,mybatis,数据库驱动这四个jar包。创建基础Bean后,书写mybatis启动的核心配置文件config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration 
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases> 
        <typeAlias alias="User" type="com.model.User"/> 
    </typeAliases> 

    <environments default="development">
        <environment id="development">
        <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/test" />
            <property name="username" value="root"/>
            <property name="password" value="mysql"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="com/model/User.xml"/>
    </mappers>
</configuration>

 DAO接口及实现部分代码:

package com.dao;

import com.model.User;

public interface UserDao {
	public User selectUserByID(int id);
	
	public int deleteById(int id);
	
	public int insertOne(User user);
	
	public int updateOne(User user);
}

 

package com.dao.impl;

import org.apache.ibatis.session.SqlSession;

import com.base.SqlSessionBase;
import com.dao.UserDao;
import com.model.User;

public class UserDaoImpl extends SqlSessionBase implements UserDao{
	private SqlSession session;
	UserDao ud; 
	
	@Override
	public User selectUserByID(int id) {
		try{
			session = SqlSessionBase.getSqlSession();
			ud = session.getMapper(UserDao.class);
			return ud.selectUserByID(id);
		} finally{
			session.close();
		}

	}

	@Override
	public int deleteById(int id) {
		try{
			session = SqlSessionBase.getSqlSession();
			ud = session.getMapper(UserDao.class);
			return ud.deleteById(id);
		} finally{
			session.commit();
			session.close();
		}
	}

	@Override
	public int insertOne(User user) {
		try{
			session = SqlSessionBase.getSqlSession();
			ud = session.getMapper(UserDao.class);
			return ud.insertOne(user);
		} finally{
			session.commit();
			session.close();
		}
	}

	@Override
	public int updateOne(User user) {
		try{
			session = SqlSessionBase.getSqlSession();
			ud = session.getMapper(UserDao.class);
			return ud.updateOne(user);
		} finally{
			session.commit();
			session.close();
		}
	}

}

 工具类:

package com.base;

import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlSessionBase {
	private static SqlSessionFactory sqlSessionFactory;
	private static Reader reader;
	
	public static SqlSession getSqlSession() {
		try {
			reader = Resources.getResourceAsReader("config.xml");
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sqlSessionFactory.openSession();
	}
	
}

 随后,使用Junit4书写单元测试用例:

package test;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;

import com.dao.impl.UserDaoImpl;
import com.model.User;

@RunWith(BlockJUnit4ClassRunner.class)
public class TestUserDao {
	private UserDaoImpl ud = new UserDaoImpl();
	
	@Test
	public void testSelectOne(){
		Assert.assertEquals(ud.selectUserByID(1).getClass(), User.class);
	}
	
	@Test
	public void testDeleteOne(){
		Assert.assertEquals(ud.deleteById(2), 1);
	}
	
	@Test
	public void testInsertone(){
		User user= new User();
		user.setId(2);
		user.setUserAddress("Somewhere");
		Assert.assertEquals(ud.insertOne(user), 1);
	}
	
	@Test
	public void testUpdateOne(){
		User user= new User();
		user.setId(1);
		user.setUserAddress("China xian");
		user.setUserName("New name");
		Assert.assertEquals(ud.updateOne(user), 1);
	}
}

 由于是对DAO层的测试,因此使用的断言较为简洁。Junit4提供的Assert API借用了hamcrest提供的断言语法AsserThat,在字符匹配、集合匹配等方面有了更直观的断言表达。在写单元测试用例中,正确使用断言语法尤为重要。

 

 

分享到:
评论

相关推荐

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

    5. **测试类**:使用JUnit4编写的测试类,如`UserServiceTest.java`,包含了对Service或DAO的单元测试用例。 6. **实体类**:如`User.java`,代表数据库中的表结构。 7. **web.xml**:Web应用的部署描述符,配置...

    Spring+SpringMVC+Mybatis 基础环境搭建工程(带测试用例)

    8. **测试用例**:工程内可能包含JUnit测试类,对Controller、Service或DAO层进行单元测试,以确保代码的功能正确无误。 通过这个基础环境搭建工程,开发者可以快速理解SSM框架的集成方式,学习如何配置和使用这些...

    springMVC junit mybatis整合

    在IT行业中,SpringMVC、JUnit和MyBatis是三个非常重要的开源框架,它们分别用于构建Web应用程序...在文件名为"junitTest"的压缩包中,可能包含了使用JUnit编写的测试类,这些类用于验证整合后的系统各个部分的正确性。

    springboot +tkmybatis + generator+单元测试.zip

    在SpringBoot项目中,JUnit与Mockito等工具结合,可以有效地对服务层、DAO层进行单元测试。 6. **tk-demo-master**: 这个文件名可能是一个Git仓库的主分支名称,暗示这个压缩包包含了一个基于SpringBoot、TK...

    基于Springboot+Mybatis打造接口自动化测试框架-全网最新最全最具技术含量的接口自动化测试及框架编写

    在Mybatis中,我们可以使用@Select、@Insert、@Update和@Delete等注解定义SQL语句,然后在测试类中调用相应的DAO方法,验证结果是否符合预期。 7. **持续集成与报告**:为了确保每次代码变更后都能进行自动化测试,...

    数据库持久层的UT测试

    这可以通过事务管理实现,例如在JUnit测试类中使用`@Transactional`注解,测试完成后自动回滚事务。 在编写测试用例时,需要注意以下几点: 1. 使用断言(Assert)来验证方法的返回值是否符合预期。 2. 对于异常...

    使用junit进行单元测试, 包含项目源码及笔记

    4. **测试套件**:多个测试类可以通过`@RunWith(Suite.class)`和`@Suite.SuiteClasses`组合在一起,形成一个测试套件,方便批量执行。 5. **测试规则**:`@Rule`可以定义自定义的测试行为,例如`ExpectedException`...

    springboot集成mybatis_redis和Junit.zip

    - **Spring Boot与JUnit**:引入JUnit依赖,编写测试类,使用`@RunWith(SpringRunner.class)`注解运行在Spring测试环境中,为需要测试的类创建bean,并编写测试方法。 6. **简易查询语句**: 在这个案例中,可能...

    springboots+mybatis+junit+oracle.7z

    4. **src/test/java** - JUnit测试代码所在目录,通常会有一个测试类用于验证MyBatis的Mapper操作。 5. **database** - 可能包含Oracle数据库的脚本文件,用于创建表结构和初始化数据。 6. **README.md** 或其他文档...

    spring+springmvc+mybatis+maven+junit整合

    5. 使用JUnit编写测试用例,验证各层功能的正确性。 6. 在Spring MVC中配置Controller,处理HTTP请求并调用Service层方法。 7. 配置事务管理,通常使用Spring的PlatformTransactionManager来管理MyBatis的事务。 ...

    MyBatis3个人实际操作的例子

    - 测试类:包含JUnit或其他测试框架的测试用例,用于验证SQL的正确性和功能的实现。 4. MyBatis3的关键特性: - 动态SQL:支持在XML或注解中编写动态SQL,根据条件动态生成不同的SQL语句。 - 缓存机制:提供本地...

    mybatis in practice 源代码

    7. **测试用例**:JUnit或其他测试框架的测试用例用于验证代码功能的正确性,帮助开发者理解每个示例的工作原理。 8. **README文件**:可能包含项目简介、安装指南和运行示例的步骤,有助于快速理解和使用源代码。 ...

    maven+springMVC+mybatis+velocity+mysql+junit项目框架搭建

    开发者可以利用JUnit编写测试用例,确保代码的功能正确性,提高代码质量。在项目开发过程中,Junit起到了关键的测试保障作用,帮助尽早发现和修复潜在问题。 综上所述,这个项目框架结合了多种技术,实现了完整的...

    mybatis所有jar包

    `junit.jar`是Java单元测试的基石,开发者可以使用JUnit测试MyBatis的Mapper接口和DAO层,确保代码的正确性。在MyBatis中,通常会为每个Mapper编写对应的测试用例。 6. **其他辅助库**: 可能还包括一些其他辅助...

    mybatis的基本演示项目-mybatis-generic-dao-demo-generic

    9. **测试**:在"mybatis-generic-dao-demos"中,可能会包含一些测试用例,通过JUnit或其他测试框架,验证通用DAO的功能是否正常工作。 通过学习和理解这个项目,开发者可以深入掌握MyBatis的使用,了解如何构建...

    DBUnit 进行单元测试

    5. **执行测试**:编写JUnit测试用例,运行业务逻辑代码,并断言预期结果。可以使用DBUnit的`assertTableEquals()`方法比较实际结果与期望结果的数据表。 6. **清理后处理**:测试结束后,通常使用`Database...

    struts2+spring+mybatise实现电话簿信息管理网站(包括数据库设计及测试用例)

    对于Struts2 Action,可以使用JUnit进行单元测试,验证Action方法的输出是否符合预期。对于MyBatis的DAO层,可以通过Mockito等工具模拟数据库环境,测试SQL查询和更新操作的正确性。此外,整体的系统测试包括功能...

    MyBatis框架的学习(六)——MyBatis整合Spring

    8. **测试验证**:编写JUnit测试用例,验证MyBatis和Spring的整合是否成功,确保数据库操作正常,并且事务管理功能生效。 通过以上步骤,你就能成功地将MyBatis集成到Spring环境中,享受到两者的强大功能。这种整合...

    开发mybatis需要的jar包含MySQL数据库驱动

    在MyBatis项目中,我们可以利用JUnit对数据访问层(DAO)进行测试,确保SQL查询返回预期的结果,以及事务管理等功能正常工作。例如,我们可以模拟数据库操作,测试Mapper接口的方法,验证其是否能正确执行SQL并返回...

Global site tag (gtag.js) - Google Analytics