मैं अपने दाओ परत के लिए एक जूनिट टेस्ट केस स्थापित करने का प्रयास करता हूं। हालांकि, मैं नहीं चाहता हूं कि टेस्ट डेटा वास्तव में डीबी पर बने रहें।@ ट्रान्सएक्शनल स्प्रिंग जूनिट परीक्षण रोलबैक नहीं कर रहा है
तो मैंने सोचा कि मुझे इसे प्रत्येक परीक्षण के बाद लेनदेन और रोलबैक करना चाहिए। यह मैं निम्नलिखित डेटा स्रोत सेटअप के साथ छोड़ देता है:
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"
p:driverClass="org.postgresql.Driver"
p:jdbcUrl="jdbc:postgresql://***"
p:user="***"
p:password="***/>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
p:dataSource-ref="dataSource"
p:packagesToScan="***"
p:hibernateProperties-ref="hibernateProps" />
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:dataSource-ref="dataSource"
p:sessionFactory-ref="sessionFactory"/>
होने वाली जांच की दाव वर्ग की स्थापना की है इस प्रकार है:
@Repository
@Transactional
@SuppressWarnings("unchecked")
public class BallotBoxRepositoryHibernateImpl implements BallotBoxRepository {
@Autowired
private SessionFactory sessionFactory;
@Override
public void saveVote(DaoObject v) {
Session sess = sessionFactory.openSession();
sess.beginTransaction();
sess.save(v);
sess.getTransaction().commit();
sess.close();
}
[...]
}
वास्तविक निरंतर आ रही है नौकरी काम अच्छी तरह से करता है। हालांकि, इरादा रोलबैक बनाया कभी नहीं किया गया है:
INFO main transaction.TransactionalTestExecutionListener:292 - Rolled back transaction after test execution for test context [...]
TransactionalTextExecutionListener परिभाषित किया गया है इस प्रकार है:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/spring/applicationContext.xml"})
@TestExecutionListeners({WebTestExecutionerListener.class, DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class})
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional
public class DaoTest { ... }
मैं अपने दाव तरीकों का उपयोग करने में एक autowired सदस्य उपयोग कर रहा हूँ:
@Autowired
private BallotBoxRepository repo;
टीएल; डीआर
जुनीट टेस्ट केस परीक्षण डेटा जारी रखता है भले ही यह कह रहा है कि रोलबैक किया गया है।
1. मैनुअल लेन-देन का उपयोग नहीं करते हैंडलिंग, स्प्रिंग 2 का उपयोग करें। @ रोलबैक एनोटेशन की जांच करें। – abalogh