当前位置:文档之家› 使用junit写单元测试类(带事务回滚说明)

使用junit写单元测试类(带事务回滚说明)


<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
然后是基类,先贴出来在解释
1、基类
@RunWith(SpringJUnit4ClassRunner.class)
public <T> T getBean(Class<T> type){
return applicationContext.getBean(type);
}
public Object getBean(String beanName){
return applicationContext.getBean(beanName);
使用junit写单元测试类(带事务回滚说明)
写单元测试类测试各层的功能是否实现达到预期,我相信很多人呗要求过。
这里是基于spring注解来写的测试类,包括一个基类,其他测试类继承这个基类就ok了。
首先肯定是要引入junit的jar(这里使用maven管理jar)
<dependency>
<groupId>junit</groupId>
//junit测试类标志
@ContextConfiguration(locations={"classpath:spring-mybatis.xml","classpath:spring-mvc.xml"}) //加载配置文件,你的
web.xml里加载了那些配置文件,这里一样要加载那些,多个配置文件以“,”隔开,分别写路径
要同时存在才有效,多个事务管理要指明事务管理名(管理名实际与配置文件里的<tx:annotation-driven transaction-
manager="transactionManager" />对应),后面设置为false,将不回滚(也就是你测试插入了,数据库就存在了)
public class SpringTest extends AbstractJUnit4SpringContextTests {
User u1 = new User(); u1.setId(3); u1.setUserName("zw1"); u1.setAge(22); u1.setPassword("zw1"); userDao.insert(u1); System.out.println("-------------验证插入----------------"); User queryU1 = userDao.selectByPrimaryKey(3);
@TestExecutionListeners(listeners={DependencyInjectionTestExecutionListener.class,TransactionalTestExecutionListener.class})
//事务测试用到,不想破坏数据库数据的增加
@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true) //这一行与上面一行共存,需
System.out.println(queryU1.getUserName()+"----------"+queryU1.getPassword()); } } 贴下后台打印的效果跟数据库的实际效果吧,主要让大家看事务 后台打印截图
数据库查询截图
结论:结合代码你会发现后台打印是插入了,之后还查询出来了,但是数据库却没有你new的这个zw1用户 另外再多嘴说下单元测试类怎么用,在类上点反键Run as/Debug as,选择JUnit Test,一样可以打断点debug的,一样可以进自己要测试 的方法的,不多说了。 junit单元测试类就这么简单,概念类的大小我就不解释,硬货上了就ok了,说多了糊涂,呵呵
Байду номын сангаас
<artifactId>junit</artifactId>
<version>4.11</version>
<!-- 表示开发的时候引入,发布的时候不会加载此包 -->
<scope>test</scope>
</dependency>
因为要spring支持,所以还需要引入spring的测试类
<dependency>
}
protected ApplicationContext getContext(){
return applicationContext;
}
@Test public void testApplicationContext(){
ApplicationContext ac = getContext(); System.out.println("----------------------->ApplicationContent:"+ac); } } 2、业务测试类 这里写的是dao层的测试类,service层一样,就想平常写dao,service的实现类一样 public class IUserDaoTest extends SpringTest{ @Resource private IUserDao userDao; @Test //所有的单测方法上都要加这个注解,你懂的 @Transactional //如果不加这一行,基类上设置了事务监听类,事务回滚也没有用,因为你没有加事务标志,跟你平常写方法,在 方法上没有加这个标志一样,好理解吧 public void testUserDao(){ User user = userDao.selectByPrimaryKey(1); System.out.println(user.getUserName()+"----------"+user.getPassword());
相关主题