2012-05-23 37 views
12

मैं वसंत 3.2, हाइबरनेट और JUnit उपयोग कर रहा हूँ 4.वसंत @ ट्रांसेक्शनल जुनीट परीक्षण में काम नहीं करता है? यदि वेब अनुप्रयोग से सीधे निष्पादित</p> <p><code>@Transactional public class SomeDaoImpl implements SomeDao {</code></p> <p>इस काम पर अद्यतन संचालन:

मेरे दाव वर्ग इस प्रकार है। हालांकि, मैं देख रहा हूं कि जूनिट एकीकरण परीक्षण जो अद्यतन विधियों का प्रयोग करते हैं, वास्तव में परिवर्तनों को जारी नहीं रखते हैं। क्या जूनिट विधियों को निष्पादित करते समय लेन-देन वापस ले रहा है?

उत्तर

22

reference द्वारा, लेनदेन वसंत में परीक्षण संदर्भों में बने रहे। जैसा कि उल्लेख किया गया है, हालांकि असामान्य है, यदि आपको अभी भी ऐसा करने की आवश्यकता है तो आप डिफ़ॉल्ट व्यवहार को बदलने के लिए @TransactionConfiguration और @Rollback का उपयोग कर सकते हैं।

11

डीएओ लेनदेन नहीं होना चाहिए। एक डीएओ कैसे जान सकता है कि इसे बड़े लेनदेन में भाग लेना चाहिए?

सेवाओं को सामान्य वसंत स्तरित वास्तुकला में लेनदेन करना चाहिए।

डाटाबेस के लिए अपने यूनिट परीक्षण चलाने के लिए यह सामान्य है कि वे वापस रोल करें। आप अपने परीक्षण डेटाबेस को बदलने के लिए नहीं चाहते हैं, जब तक कि आप एक परीक्षण डेटाबेस सेट अप नहीं कर लेते जिसे आप छोड़ सकते हैं और इच्छानुसार फिर से बना सकते हैं।

प्रश्न होना चाहिए: लिखित रूप में आपके परीक्षण कैसे लेनदेन करते हैं? यदि आप कभी प्रतिबद्ध नहीं होते हैं, तो आप रिकॉर्ड कभी नहीं देख पाएंगे।

+0

खेद होना चाहिए था कि मैं दृढ़ता के लिए हाइबरनेट का उपयोग कर रहा हूं। – Nilesh

+0

मेरा जवाब नहीं बदलता है। – duffymo

+2

वैसे भी यह आपके उत्तर पर एक टिप्पणी नहीं होना चाहिए :-)। बीटीडब्ल्यू ऊपर वर्णित सबसे अच्छा अभ्यास अच्छी तरह से प्रकाशित है। मुझे लगता है कि आप पैडेंटिक होने की कोशिश में खो गए हैं और असली सवाल का जवाब देने के लिए भूल गए हैं! – Nilesh

8

From the "Testing" section of the docs, आप

@Rollback(false) 

एनोटेशन उपयोग करें यदि आप SpringJUnit4ClassRunner अपने लेनदेन वापस रोल नहीं करना चाहते कर सकते हैं।