2016-03-17 9 views
7

के साथ परीक्षण विधियों को कैसे चलाएं I JUnit और सेलेनियम वेबड्राइवर का उपयोग कर रहा हूं। मैं कैसे मैं उन्हें अपने कोड में लिखते हैं, के रूप में नीचे के रूप में क्रम में अपने परीक्षण के तरीकों को चलाना चाहते हैं:जूनिट

welcomeNewUserTest() 
registerUserTest() 
questionaireNewUserTest() 
:

@Test 
public void registerUserTest(){ 
    // code 
} 

@Test 
public void welcomeNewUserTest(){ 
    // code 
} 

@Test 
public void questionaireNewUserTest(){ 
    // code 
} 

लेकिन यह काम नहीं करता है, यह हमेशा इस क्रम में अपने परीक्षण के तरीकों को निष्पादित करता है

अगर मैं प्रत्यय परीक्षण के साथ अपनी विधि का नाम देता हूं तो मैंने कहीं जवाब पढ़ा है, तो जुनीट उन्हें कोड में ऑर्डर करने के क्रम में निष्पादित करेगा। जाहिर है, यह काम नहीं करता है।

कोई मदद? धन्यवाद

+3

यदि मैं आपके परिदृश्य को सही ढंग से समझता हूं, तो यह परीक्षण करने का एक बुरा दृष्टिकोण है - आपके परीक्षण एक-दूसरे से स्वतंत्र होना चाहिए। –

+0

@DmitryZaitsev: हाँ, मुझे पता है। क्योंकि मैं स्वीकृति परीक्षण लिखता हूं, और यह वास्तव में बड़ा है, मैं इसे छोटे परीक्षण विधियों में तोड़ने की कोशिश करता हूं। यह देखने का प्रयास करें कि क्या जूनिट उन्हें – Ragnarsson

+1

क्रम में चला सकता है [संभावित डुप्लिकेट [JUnit4 में विशिष्ट क्रम में परीक्षण विधियों को कैसे चलाएं?] (Http://stackoverflow.com/questions/3693626/how-to-run-test-methods- इन-विशिष्ट-ऑर्डर-इन-जूनिट 4) –

उत्तर

6

तो इन जैसे परीक्षणों के लिए - जहां चरण एक दूसरे पर निर्भर हैं - आपको वास्तव में उन्हें एक इकाई के रूप में निष्पादित करना चाहिए। आप वास्तव में की तरह कुछ कर रही किया जाना चाहिए:

@Test 
public void registerWelcomeAndQuestionnaireUserTest(){ 
    // code 
    // Register 
    // Welcome 
    // Questionnaire 
} 

@Jeremiah नीचे का उल्लेख है, वहाँ अनूठे तरीके कि अलग परीक्षण अनिश्चित निष्पादित कर सकते हैं के एक मुट्ठी भर रहे हैं।

अब मैंने कहा है कि, आपका समाधान यहां है।

यदि आप अलग-अलग परीक्षण चाहते हैं, तो आप @FixMethodOrder का उपयोग कर सकते हैं और फिर इसे NAME_ASCENDING पर कर सकते हैं। यह एकमात्र तरीका है जिसे मैं जानता हूं।

@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
public class TestMethodOrder { 

    @Test 
    public void testA() { 
     System.out.println("first"); 
    } 
    @Test 
    public void testC() { 
     System.out.println("third"); 
    } 
    @Test 
    public void testB() { 
     System.out.println("second"); 
    } 
} 

निष्पादित करेंगे:

testA(), testB(), testC()

आपके मामले में:

@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
public class ThisTestsEverything{ 

    @Test 
    public void T1_registerUser(){ 
     // code 
    } 

    @Test 
    public void T2_welcomeNewUser(){ 
     // code 
    } 

    @Test 
    public void T3_questionaireNewUser(){ 
     // code 
    } 

} 
+1

धन्यवाद। मैंने वास्तव में ऐसा कहा था, उन्हें एक इकाई के रूप में निष्पादित करें। मैं सिर्फ यह जानना चाहता था कि ऐसा करने का अवसर है या नहीं। और @FixMethodOrder काम करता है। ऐसा लगता है कि मैंने क्या देखा। धन्यवाद। मुझे इसके बारे में पता नहीं था – Ragnarsson

+0

@ लुइसैट हाहा अच्छी तरह से यह है कि आप दोनों ने अपना दृष्टिकोण बदल दिया है और यदि आपको कभी इसकी आवश्यकता है तो अब आपके पास समाधान है। –

+1

ऑर्डरिंग एनोटेशन का उपयोग करते समय याद रखने की एक बात यह है कि परीक्षणों को निष्पादित करने के तरीके के आधार पर यह अभी भी गलत व्यवहार कर सकता है। उदाहरण के लिए, यदि आप SureFire का उपयोग करते हैं तो आपको उस कॉन्फ़िगरेशन में RunOrder को परिभाषित करने की आवश्यकता होगी: http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#runOrder इसके अलावा, यदि आप किसी का उपयोग करते हैं निष्पादन उपकरण जो आपके परीक्षणों (जैसे मैवेन) में बहु-थ्रेडिंग पेश कर सकता है, आपके परीक्षण फिर से आदेश से निष्पादित हो सकते हैं।मुझे इस बिंदु के बारे में निश्चित नहीं है, लेकिन अगर आप अप्रत्याशित परिणाम देखना शुरू करते हैं तो ध्यान में रखना उचित है। – Jeremiah

3

आप वे कैसे लिखा जाता है के रूप में क्रम में अपने परीक्षण तरीकों नहीं चल सकता। बिंदु यह है कि परीक्षण एक-दूसरे से स्वतंत्र होना चाहिए। जुनीट निर्भर परीक्षणों को प्रोत्साहित नहीं करता है।

लेकिन अगर आप बहुत चाहते हैं कर रहे हैं ...

वहाँ @FixMethodOrder एनोटेशन है। कृपया, निम्नलिखित Annotation Type FixMethodOrder

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