java - ujian unit, bagaimana untuk membiarkan spring menguruskan transaksi tanpa mencemarkan pangkalan data
阿神
阿神 2017-06-12 09:25:30
0
2
990

Saya cuba menggunakanspringdanjunituntuk menguji kaedah DAO Saya melihat beberapa kaedah di Internet yang menggunakan pengurusan transaksi deklaratif spring (iaitu @Transactional) untuk operasi transaksi, dengan mengatakan bahawa selepas ujian selesai, musim bunga. boleh Ia akan membuat kaedah ujian kembali untuk mencapai tujuan ujian.
Kemudian saya mengikuti pendekatan ini dan menguji kaedah menambah operasi dalamdaosaya mendapati bahawa selepas transaksi diserahkan, pengembalian tidak berjaya, dan terdapat data tambahan dalam pangkalan data yang saya uji. Pada mulanya saya fikir ia adalah kerana spring tidak melakukan rollback, tetapi kemudian saya memerhatikan maklumat cetakan konsol dan mendapati terdapat maklumat rollback, tetapi mengapa ia gagal tidak jelas. Saya menemui beberapa penyelesaian yang berkaitan, tetapi saya mendapati bahawa ia tidak menyelesaikan masalah saya. Saya sangat bermasalah, jadi saya datang ke sini untuk meminta bantuan anda, saya harap anda boleh memberi saya nasihat.

Berikut ialah kod saya dan konfigurasi yang sepadan

  • kaedah addUser() DAOImpl

@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 ; }
Fail
  • daos.xml dikonfigurasikan sewajarnya

   
  • Kategori ujian

@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()); }
  • Beberapa maklumat percetakan konsol

信息: 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
阿神
阿神

闭关修行中......

membalas semua (2)
我想大声告诉你

Gunakan dbunit digabungkan dengan spring-test untuk menguji

    typecho

    Transaksional ialah transaksi lapisan perkhidmatan Jika anda menggunakannya, anda tidak perlu menulis transaksi di lapisan DAO

      Muat turun terkini
      Lagi>
      kesan web
      Kod sumber laman web
      Bahan laman web
      Templat hujung hadapan
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!