2010-08-17 6 views
6

हमने अपने आवेदन में JUnit4 लागू किया है जो डीबी 2 के साथ स्प्रिंग कोर & जेपीए का उपयोग करता है। हमें एक पूर्ण कार्यक्षमता का परीक्षण करने की आवश्यकता है जो एक डेटाबेस से डेटा पुनर्प्राप्त करता है और किसी अन्य डेटाबेस में विलीन हो जाता है।जूनिट टेस्ट केस लेनदेन प्रतिबद्ध नहीं हो रहा है - कोई त्रुटि

1 डेटाबेस से डेटा पुनर्प्राप्त करने के लिए टेस्ट केस लिखा गया है और यह बिना किसी त्रुटि के चल रहा है लेकिन रिकॉर्ड दूसरे डेटाबेस में स्टोर नहीं हैं।

कार्यान्वयन

testcase वर्ग हम परीक्षण का मामला यदि आवश्यक हो तो एक सौदे के तहत चलाने बनाने के लिए निम्नलिखित एनोटेशन को शामिल किया है,

@RunWith(SpringJUnit4ClassRunner.class) 
@TestExecutionListeners({ 
     DependencyInjectionTestExecutionListener.class,  
     TransactionalTestExecutionListener.class}) 
@ContextConfiguration(locations={""}) 
@TransactionConfiguration(transactionManager="defaultTransactionManager", defaultRollback=false) 
@Transactional 

आवेदन हम एक प्रबंधक वर्ग इस प्रदर्शन करने के लिए है में doSynch() विधि के साथ ऑपरेशन। उस विधि से crudHelper क्लास की txStore() विधि को इकाई को डेटाबेस में मर्ज करने के लिए doStore() विधि (उसी कक्षा में) प्रारंभ करने और कॉल करने के लिए बुलाया जाएगा।

के बाद बाहर इस परीक्षण का मामला तर्क

TestCase testSynch() - @Transactional(propagation=Propagation.SUPPORTS) 
Manager doSynch() - @Transactional(propagation=Propagation.NEVER) 
CRUDHelper txStore() - @Transactional(propagation=Propagation.REQUIRED) 
      doStore() - No Transactional annotation 

doSynch() व्यवहार कथात्मक माध्यम के रूप में कभी नहीं चिह्नित है उस बिंदु पर के रूप में यह इस तरह के लेन-देन में CRUDHelper के रूप में किसी भी लेनदेन और आगे के स्तर में की जरूरत नहीं है एक लेनदेन उपलब्ध होने के लिए आवश्यक के रूप में चिह्नित किया जा सकता है।

समस्या

यहाँ जब हम परीक्षण का मामला जो कार्यक्षमता का परीक्षण करने के लिए प्रबंधक के doSynch() विधि कॉल चलाने के लिए, पूर्ण प्रवाह सही सिवाय इसके कि रिकॉर्ड का विलय नहीं कर रहे हैं काम कर रहा है और कोई त्रुटि फेंक दिया जाता है।

जेएसपी से बुलाए जाने वाले प्रबंधक विधि महान काम करता है। इसके अलावा हमने परीक्षण मामले से सीधे txStore() को कॉल करके परीक्षण किया और यह भी ठीक काम करता है।

कृपया हमें बताएं कि क्या लेनदेन प्रबंधन उचित नहीं है या इस मुद्दे के आसपास एक काम अधिक सहायता होगी। अगर समस्या या पर्यावरण स्पष्ट नहीं है तो कृपया मुझे अपडेट करें। अग्रिम में धन्यवाद।!!

उत्तर

6

क्या आप @Rollback एनोटेशन के साथ अपनी विधियों को चिह्नित करते हैं?

JavaDoc से

:

टेस्ट एनोटेशन इंगित करने के लिए किया जाए या नहीं एनोटेट परीक्षा पद्धति के लिए लेन-देन वापस उपलब्ध हो जाएगा परीक्षा पद्धति पूरा कर लिया है के बाद। यदि सही है, लेनदेन वापस लुढ़का जाएगा; अन्यथा, लेनदेन किया जाएगा।

+0

धन्यवाद 4 आपका उत्तर। हमने testRollback मान को टेस्टकेस क्लास स्तर में गलत के रूप में सेट किया है और विधि स्तर के लिए कोई अन्य रोलबैक नहीं दिया है। लेकिन केवल यह मामला है कि यह कैसे काम करता है @Transactional को doStore() विधि में जोड़कर। हम केवल इस मामले में मुद्रित सम्मिलित प्रश्नों को देखने में सक्षम हैं और यह करते हैं कि स्टोर की एनोटेशन हटा दी जाती है, यहां तक ​​कि एक भी सम्मिलित क्वेरी मुद्रित नहीं होती है जब em.merge() को कॉल किया जाता है। लेकिन हम उस परिवर्तन को नहीं कर सके क्योंकि यह हमारे फ्रीज फ्रेमवर्क क्लास में है। कोई मदद सराहनीय होगी। !! – raksja

संबंधित मुद्दे