2017-04-07 15 views
5

@BeforeAll एनोटेशन कक्षा में सभी परीक्षणों से पहले चलाने के लिए एक विधि को चिह्नित करता है।जुनीट 5 में, सभी परीक्षणों से पहले कोड कैसे चलाएं

http://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations

लेकिन वहाँ सभी परीक्षण से पहले कुछ कोड को चलाने के लिए एक तरीका है, सभी वर्गों में?

मैं सुनिश्चित करने के लिए परीक्षण डेटाबेस कनेक्शन के एक विशिष्ट समूह है, और इन कनेक्शनों की वैश्विक एक बार सेटअप होने चाहिए से पहले किसी भी परीक्षण चलाने का उपयोग करें कि चाहते हैं।

+0

यह विधि क्या है? – davidxxx

+0

सिर्फ रिकॉर्ड के लिए: यदि आपको उत्तर में से कोई भी उपयोगी मदद मिलती है - कृपया किसी बिंदु पर उनमें से किसी एक को स्वीकार करने पर विचार करें ;-) – GhostCat

उत्तर

3

वर्तमान में यह समर्थित नहीं है, लेकिन वहाँ JUnit 5 इस विषय के बारे में के लिए एक पुल अनुरोध है: Introduce support for before/after callbacks once per entire test run

+1

यह प्रस्ताव भी इस तरह के एक्सटेंशन को लिखना संभव बनाता है: https://github.com/JUnit टीम/junit5/मुद्दों/671 –

2

मुझे लगता है कि ऐसा करने के लिए एक मतलब के बारे में पता नहीं कर रहा हूँ।

मैं बस यह सुनिश्चित करें कि @BeforeAll के लिए सभी कोड है कि init काम करने के लिए (शायद एक आलसी रास्ता पुनरावृत्ति से बचने के लिए) एक निश्चित सिंगलटन कॉल होगा।

शायद सुविधाजनक नहीं ... केवल अन्य विकल्प मैं देख रहा हूँ: मैं एक विशिष्ट JVM काम के भीतर चलाने के लिए अपनी परीक्षण मान। आप सकता है हुक एक agent कि JVM रन है कि आप के लिए है कि init काम करता है में

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

1

आप अपने परीक्षण वर्गों में से प्रत्येक कि एक अंतरफलक है कि एक staticBeforeAll को परिभाषित करता है (इतना है कि यह ओवरराइड नहीं किया जा सकता है) के साथ अपने डेटाबेस का उपयोग करता चिह्नित कर सकते हैं। उदा .:

interface UsesDatabase { 
    @BeforeAll 
    static void initializeDatabaseConnections() { 
     // initialize database connections 
    } 
} 

इस विधि ताकि आप केवल एक बार अपने कनेक्शन को प्रारंभ और फिर अन्य कॉल के लिए कुछ भी नहीं करना एक तरह से परिभाषित करने की आवश्यकता होगी प्रत्येक को लागू करने वर्ग के लिए एक बार सक्रिय किया जाएगा।

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