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

您的位置:首頁技術(shù)文章
文章詳情頁

java - 單元測試,怎么讓spring管理事務(wù)又不污染數(shù)據(jù)庫

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

問題描述

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

以下是我的代碼和相應(yīng)配置

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 文件相應(yīng)配置

<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 結(jié)合 spring-test 去測試

回答2:

Transactional是service層事務(wù),用了就不必在DAO層寫事務(wù)了

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 欧美91精品久久久久网免费 | 欧美人成在线观看 | 亚洲天堂日韩在线 | 欧美成人另类 | 特级片视频 | 小屁孩cao大人免费网站 | 亚洲一区二区三区高清网 | 日本综合欧美一区二区三区 | 精品久久久日韩精品成人 | 香港aa三级久久三级 | 欧美成人性色xxxxx视频大 | 国产大片免费天天看 | 国产网站黄 | 精品午夜一区二区三区在线观看 | 一区二区三区在线免费视频 | 免费黄色成人 | 日本韩国一区 | 中文字幕亚洲一区 | 国产高清视频免费 | 男操美女 | 亚洲男人天堂 | 成年女人看片免费视频频 | 久久久久久久久久久福利观看 | 国产亚洲精品自在久久77 | 国产精品无码久久久久 | 伊人狠狠丁香婷婷综合色 | 成人观看免费大片在线观看 | 国产成人精品s8p视频 | 久久88| 美女被拍拍拍拍拍拍拍拍 | 亚洲成人福利 | 成人午夜在线播放 | 亚洲狠狠ady亚洲精品大秀 | 亚洲免费看片 | 亚洲一区二区三区不卡视频 | 婷婷久久久五月综合色 | 日韩三级在线播放 | 一区二区三区不卡视频 | 欧美成人免费网在线观看 | 在线播放成人高清免费视频 | 欧美一级视频免费 |