国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

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

瀏覽:46日期: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
相關文章:
主站蜘蛛池模板: 久久国产成人精品国产成人亚洲 | 一区二区中文字幕亚洲精品 | 久久免费手机视频 | 国产免费久久精品99 | 欧美大胆一级视频 | 在线私拍国产福利精品 | 在线观看中文字幕国产 | 精品国产一区二区三区免费 | 成人看片黄a免费看视频 | 国产l精品国产亚洲区久久 国产tv在线 | 欧美日韩视频一区二区 | 美女张开腿黄网站免费国产 | 精品日韩欧美 | 激情6月丁香婷婷色综合 | 欧美一级www片免费观看 | 久久厕所精品国产精品亚洲 | 中文字幕国产视频 | 黄色三级视频网站 | 国内久久精品 | 日韩精品免费看 | 看成年女人免费午夜视频 | 国产不卡精品一区二区三区 | 国产男女爽爽爽免费视频 | 三上悠亚免费一区二区在线 | 俄罗斯小屁孩cao大人免费 | 一级特级aaa毛片 | 亚洲视频天堂 | 日韩一区二区久久久久久 | 久久99精品九九九久久婷婷 | 欧美猛交xxxx免费看 | 奇米888四色在线精品 | 91最新地址永久入口 | 国产第一页在线观看 | 国产波多野结衣中文在线播放 | 久久亚洲欧美成人精品 | 久久国产精品无码网站 | 国产一区二区三区高清视频 | 一级特黄aa大片欧美 | 欧美日韩在线视频不卡一区二区三区 | 国产精品一区伦免视频播放 | 欧美日韩精品一区二区三区视频播放 |