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,在字符匹配、集合匹配等方面有了更直观的断言表达。在写单元测试用例中,正确使用断言语法尤为重要。
相关推荐
5. **测试类**:使用JUnit4编写的测试类,如`UserServiceTest.java`,包含了对Service或DAO的单元测试用例。 6. **实体类**:如`User.java`,代表数据库中的表结构。 7. **web.xml**:Web应用的部署描述符,配置...
8. **测试用例**:工程内可能包含JUnit测试类,对Controller、Service或DAO层进行单元测试,以确保代码的功能正确无误。 通过这个基础环境搭建工程,开发者可以快速理解SSM框架的集成方式,学习如何配置和使用这些...
在IT行业中,SpringMVC、JUnit和MyBatis是三个非常重要的开源框架,它们分别用于构建Web应用程序...在文件名为"junitTest"的压缩包中,可能包含了使用JUnit编写的测试类,这些类用于验证整合后的系统各个部分的正确性。
在SpringBoot项目中,JUnit与Mockito等工具结合,可以有效地对服务层、DAO层进行单元测试。 6. **tk-demo-master**: 这个文件名可能是一个Git仓库的主分支名称,暗示这个压缩包包含了一个基于SpringBoot、TK...
在Mybatis中,我们可以使用@Select、@Insert、@Update和@Delete等注解定义SQL语句,然后在测试类中调用相应的DAO方法,验证结果是否符合预期。 7. **持续集成与报告**:为了确保每次代码变更后都能进行自动化测试,...
这可以通过事务管理实现,例如在JUnit测试类中使用`@Transactional`注解,测试完成后自动回滚事务。 在编写测试用例时,需要注意以下几点: 1. 使用断言(Assert)来验证方法的返回值是否符合预期。 2. 对于异常...
4. **测试套件**:多个测试类可以通过`@RunWith(Suite.class)`和`@Suite.SuiteClasses`组合在一起,形成一个测试套件,方便批量执行。 5. **测试规则**:`@Rule`可以定义自定义的测试行为,例如`ExpectedException`...
- **Spring Boot与JUnit**:引入JUnit依赖,编写测试类,使用`@RunWith(SpringRunner.class)`注解运行在Spring测试环境中,为需要测试的类创建bean,并编写测试方法。 6. **简易查询语句**: 在这个案例中,可能...
4. **src/test/java** - JUnit测试代码所在目录,通常会有一个测试类用于验证MyBatis的Mapper操作。 5. **database** - 可能包含Oracle数据库的脚本文件,用于创建表结构和初始化数据。 6. **README.md** 或其他文档...
5. 使用JUnit编写测试用例,验证各层功能的正确性。 6. 在Spring MVC中配置Controller,处理HTTP请求并调用Service层方法。 7. 配置事务管理,通常使用Spring的PlatformTransactionManager来管理MyBatis的事务。 ...
- 测试类:包含JUnit或其他测试框架的测试用例,用于验证SQL的正确性和功能的实现。 4. MyBatis3的关键特性: - 动态SQL:支持在XML或注解中编写动态SQL,根据条件动态生成不同的SQL语句。 - 缓存机制:提供本地...
7. **测试用例**:JUnit或其他测试框架的测试用例用于验证代码功能的正确性,帮助开发者理解每个示例的工作原理。 8. **README文件**:可能包含项目简介、安装指南和运行示例的步骤,有助于快速理解和使用源代码。 ...
开发者可以利用JUnit编写测试用例,确保代码的功能正确性,提高代码质量。在项目开发过程中,Junit起到了关键的测试保障作用,帮助尽早发现和修复潜在问题。 综上所述,这个项目框架结合了多种技术,实现了完整的...
`junit.jar`是Java单元测试的基石,开发者可以使用JUnit测试MyBatis的Mapper接口和DAO层,确保代码的正确性。在MyBatis中,通常会为每个Mapper编写对应的测试用例。 6. **其他辅助库**: 可能还包括一些其他辅助...
9. **测试**:在"mybatis-generic-dao-demos"中,可能会包含一些测试用例,通过JUnit或其他测试框架,验证通用DAO的功能是否正常工作。 通过学习和理解这个项目,开发者可以深入掌握MyBatis的使用,了解如何构建...
5. **执行测试**:编写JUnit测试用例,运行业务逻辑代码,并断言预期结果。可以使用DBUnit的`assertTableEquals()`方法比较实际结果与期望结果的数据表。 6. **清理后处理**:测试结束后,通常使用`Database...
对于Struts2 Action,可以使用JUnit进行单元测试,验证Action方法的输出是否符合预期。对于MyBatis的DAO层,可以通过Mockito等工具模拟数据库环境,测试SQL查询和更新操作的正确性。此外,整体的系统测试包括功能...
8. **测试验证**:编写JUnit测试用例,验证MyBatis和Spring的整合是否成功,确保数据库操作正常,并且事务管理功能生效。 通过以上步骤,你就能成功地将MyBatis集成到Spring环境中,享受到两者的强大功能。这种整合...
在MyBatis项目中,我们可以利用JUnit对数据访问层(DAO)进行测试,确保SQL查询返回预期的结果,以及事务管理等功能正常工作。例如,我们可以模拟数据库操作,测试Mapper接口的方法,验证其是否能正确执行SQL并返回...