Spring MVC + Hibernate + JUnit 4 集成测试实战
在进行持久层开发时,编写单元测试是保证代码质量的关键环节。这里以 Spring 3 MVC 配合 Hibernate 为例,展示如何搭建基于 JUnit 4 的集成测试环境。
依赖准备
首先确保项目中引入了必要的测试库,主要是 spring-test.jar 和 junit4.jar。这是运行 Spring 上下文加载的基础。
核心注解解析
测试类通常继承自 SpringJUnit4ClassRunner,这样 Spring 容器会在测试开始前初始化。关键注解包括:
@ContextConfiguration:指定配置文件路径,通常是classpath:applicationContext.xml。@Transactional:开启事务支持,配合defaultRollback=true,测试结束后数据会自动回滚,避免污染数据库。@Resource:按名称注入所需的 Manager 或服务 Bean。
测试代码实现
下面是一个典型的 DAO 测试类结构,包含了部门、员工及企业信息的同步逻辑测试。注意观察事务回滚的配置以及具体的业务方法调用。
package com.partner.dao.test;
import java.util.List;
import javax.annotation.Resource;
import org.junit.Before;
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.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
import com.partner.core.entity.Company;
import com.partner.core.entity.Department;
import com.partner.core.entity.Employee;
import com.partner.core.manager.CompanyManager;
import com.partner.core.manager.DepartmentManager;
import com.partner.core.manager.EmployeeManager;
import com.partner.core.service.impl.AuthorizationServiceImpl;
@Transactional
@TransactionConfiguration(transactionManager="tm",defaultRollback=true)//设置测试成功之后数据是否回滚
@RunWith(SpringJUnit4ClassRunner.class)
{
DepartmentManager departmentManager;
EmployeeManager employeeManager;
CompanyManager companyManager;
AuthorizationServiceImpl authorizationServiceImpl;
Exception{
}
{
List<Department> depts = departmentManager.getDepartmentsByCompanyIdAndDept_ids(,);
(Department d:depts){
System.out.println(+d.getDept_name());
}
}
{
departmentManager.getDepartment();
System.out.println(d.getDept_name());
}
{
departmentManager.deleteDepartmentByDeptId(, );
}
{
departmentManager.delDepartmentStatus(, );
}
{
{
departmentManager.getDepartmentByCompanyIdAndDept_id(, );
d.setDept_name(d.getDept_name()+);
departmentManager.updateDepartment(d);
} (Exception e) {
e.printStackTrace();
}
}
{
List<Employee> employees = employeeManager.getEmployeeBylist();
(Employee employee:employees){
System.out.println(+employee.getRealname());
}
}
{
List<Employee> employees = employeeManager.getEmployeeByCompanyIdAndOpenIds(,);
(Employee employee:employees){
System.out.println(+employee.getRealname());
}
}
{
{
companyManager.companyByCompany_id();
} (Exception e) {
e.printStackTrace();
}
}
}

