亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

java - 單元測試,怎么讓spring管理事務又不污染數據庫

瀏覽:42日期:2023-11-07 08:29:14

問題描述

我正在嘗試用springjunit測試 DAO 的方法,我看到網上的一些做法是使用 spring 的聲明式事務管理(即@Transactional)進行事務操作,說是這樣在測試完成之后能夠spring會讓測試的方法回滾,從而達到測試的目的。然后我按照這一做法對dao中添加操作的方法進行了測試,發現事務進行提交后,回滾沒有成功,數據庫中多出來了我進行測試的數據。一開始我以為是spring沒有進行回滾,但是后面觀察控制臺打印信息發現是有rollback信息的,但是為什么會失敗呢,就不清楚。我查到一些相關的方案,但是我發現并沒能解決我的問題。很困擾,特來請教各位,望不吝指教。

以下是我的代碼和相應配置

DAOImpl 的addUser()方法

@Override public void addUser(User u) {Session session = sessionFactory.openSession();Transaction tc = session.getTransaction();try { tc.begin(); session.save(u); tc.commit();}catch(Exception e){ tc.rollback(); e.printStackTrace();}return ; }

daos.xml 文件相應配置

<bean class='org.springframework.orm.hibernate5.HibernateTransactionManager'><property name='sessionFactory' ref='mySessionFactory' /> </bean> <tx:annotation-driven transaction-manager='txManager' />

測試類

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations={'/services.xml'})@Transactional(transactionManager = 'txManager')@Rollback(true)public class UserServiceImplTest {@Autowired UserDAO userDAO; //自動裝配userDAO@Test public void testAddUse(){User u = new User();u.setLevel(3);u.setName('ab11');u.setPassword('hh');userDAO.addUser(u);Assert.assertEquals(u.getName(), userDAO.getUserList().get(userDAO.getUserList().size()-1).getName()); }

部分控制臺打印信息

信息: Using DataSource [org.apache.commons.dbcp2.BasicDataSource@498d318c] of Hibernate SessionFactory for HibernateTransactionManager六月 02, 2017 4:46:19 下午 org.springframework.test.context.transaction.TransactionContext startTransaction信息: Began transaction (1) for test context [DefaultTestContext@52d6cd34 testClass = UserServiceImplTest, testInstance = com.dxzh.mall.serviceImpl.test.UserServiceImplTest@715d6168, testMethod = testAddUse@UserServiceImplTest, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@75798d03 testClass = UserServiceImplTest, locations = ’{classpath:/services.xml}’, classes = ’{}’, contextInitializerClasses = ’[]’, activeProfiles = ’{}’, propertySourceLocations = ’{}’, propertySourceProperties = ’{}’, contextCustomizers = set[[empty]], contextLoader = ’org.springframework.test.context.support.DelegatingSmartContextLoader’, parent = [null]]]; transaction manager [org.springframework.orm.hibernate5.HibernateTransactionManager@c6634d]; rollback [true]Fri Jun 02 16:46:19 CST 2017 WARN: Establishing SSL connection without server’s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn’t set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to ’false’. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.Hibernate: insert into user (name, password, level) values (?, ?, ?)六月 02, 2017 4:46:19 下午 org.springframework.test.context.transaction.TransactionContext endTransaction信息: Rolled back transaction for test context [DefaultTestContext@52d6cd34 testClass = UserServiceImplTest, testInstance = com.dxzh.mall.serviceImpl.test.UserServiceImplTest@715d6168, testMethod = testAddUse@UserServiceImplTest, testException = java.lang.RuntimeException, mergedContextConfiguration = [MergedContextConfiguration@75798d03 testClass = UserServiceImplTest, locations = ’{classpath:/services.xml}’, classes = ’{}’, contextInitializerClasses = ’[]’, activeProfiles = ’{}’, propertySourceLocations = ’{}’, propertySourceProperties = ’{}’, contextCustomizers = set[[empty]], contextLoader = ’org.springframework.test.context.support.DelegatingSmartContextLoader’, parent = [null]]].六月 02, 2017 4:46:19 下午 org.springframework.context.support.GenericApplicationContext doClose信息: Closing org.springframework.context.support.GenericApplicationContext@3ffc5af1: startup date [Fri Jun 02 16:46:13 CST 2017]; root of context hierarchy

問題解答

回答1:

用dbunit 結合 spring-test 去測試

回答2:

Transactional是service層事務,用了就不必在DAO層寫事務了

標簽: java
相關文章:
主站蜘蛛池模板: 亚洲人成网站色7799在线观看 | 国产美女精品视频 | 中文字幕有码视频 | 欧美综合色区 | 一区二区三区四区视频在线观看 | 日本高清一级做a爱过程免费视频 | 国产伦精品一区二区三区视频金莲 | 青青草97国产精品免费观看 | 亚洲国产精品嫩草影院久久 | 国产区精品福利在线观看精品 | 丝瓜视频91 | 亚洲欧美日本人成在线观看 | 久操色 | 永久网站色视频在线观看免费 | 九九精品视频在线观看九九 | 国产一级爱c片免费观看 | 亚洲精品日本一区二区在线 | 97一区二区三区四区久久 | 日本精品久久久久中文字幕2 | 无夜精品久久久久久 | 九九五月天 | 色涩在线 | 午夜性刺激免费视频观看不卡专区 | 一一级黄色片 | 欧美黑人性猛交╳xx╳动态图 | 国产精品69白浆在线观看免费 | 欧美中文综合在线视频 | 成人性欧美丨区二区三区 | 亚洲精品一区二区不卡 | 亚洲国产成人久久综合碰碰动漫3d | 亚洲免费二区三区 | 伊人思思 | 中日韩美中文字幕 | 一区在线免费观看 | 亚洲日韩色综合视频 | 蕾丝视频在线看片国产 | 在线欧美精品一区二区三区 | 国内自拍经典三级在线 | 中日韩视频在线观看 | 96精品| 国产大片免费观看中文字幕 |