2015-09-25 6 views
13

चला सकते हैं I कई मामलों में @Parameterized का उपयोग कई क्रमिक परीक्षणों पर परीक्षण चलाने के लिए करते हैं। यह बहुत अच्छी तरह से काम करता है और परीक्षण कोड को सरल और साफ रखता है।JUnits @ पैरामीटरेटेड का उपयोग करते समय, क्या मेरे पास कुछ परीक्षण अभी भी एक बार

हालांकि कभी-कभी मैं कुछ परीक्षण विधियों को अभी भी एक बार चलाने के लिए चाहता हूं क्योंकि वे पैरामीटर का उपयोग नहीं करते हैं, क्या जुनीट के साथ टेस्ट-विधि को "सिंगलटन" या "रन" के रूप में चिह्नित करने का कोई तरीका है -जब "?

नोट: यह चिंता का विषय नहीं ग्रहण में एक परीक्षण चलाने करता है, मैं कैसे कि :)

+3

ऐसा लगता है कि उन परीक्षणों को पैरामीटर परीक्षणों के समान सूट में नहीं होना चाहिए। – Makoto

+2

हाँ, यह एकमात्र समाधान है जो मेरे दिमाग में आया, लेकिन मुझे वास्तव में एक सूट में "संबंधित" परीक्षण करना पसंद है, उदा। एक टेस्ट-क्लास में एक वर्ग के लिए सभी परीक्षण ... – centic

उत्तर

8

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

  1. टेस्ट स्वीट वर्ग आप
  2. पैरामिट्रीकृत परीक्षण वर्ग
  3. के लिए एक संदर्भ जोड़ें अन्य वर्ग (ते) गैर पैरामिट्रीकृत परीक्षण युक्त जोड़े परीक्षण कर रहे हैं के साथ जुड़े बनाएँ।

    import org.junit.runners.Suite; 
    import org.junit.runner.RunWith; 
    
    @RunWith(Suite.class) 
    @Suite.SuiteClasses({ParameterizedTestClass.class, UnitTests.class, MoreUnitTests.class}) 
    public class SutTestSuite{ 
        //Empty... 
    } 
    
+1

हाँ, यह वही है जो मैं समाप्त करूँगा, मुझे आशा है कि एकल परीक्षण-विधियों के लिए एनोटेशन की तरह कुछ होगा ... – centic

1

JUnit प्लगइन्स है कि आप कुछ और अधिक सुविधाओं देने के/पैरामिट्रीकृत परीक्षण के बारे में बिजली की एक संख्या है। झोहाक, जूनिट-पैराम्स और जुनीट-डाटाप्रोवाइडर की जांच करें। वे आपको पैरामीट्रिज्ड और सरल जूनिट परीक्षणों को मिश्रण करने की अनुमति देते हैं

+0

सुझावों के लिए धन्यवाद, ये देखो दिलचस्प! – centic

24

आप अपने परीक्षण को Enclosed runner के साथ बना सकते हैं।

@RunWith(Enclosed.class) 
public class TestClass { 

    @RunWith(Parameterized.class) 
    public static class TheParameterizedPart { 

     @Parameters 
     public static Object[][] data() { 
      ... 
     } 

     @Test 
     public void someTest() { 
      ... 
     } 

     @Test 
     public void anotherTest() { 
      ... 
     } 
    } 

    public static class NotParameterizedPart { 
     @Test 
     public void someTest() { 
      ... 
     } 
    } 
} 
0

इससे पहले कि मैं के बारे में "@RunWith (Enclosed.class)" पता था कि दृष्टिकोण, मैं निम्नलिखित (समान) समाधान बाहरी वर्ग का विस्तार इनर क्लासों के साथ प्रयोग किया,। मैं इस संरचना का उपयोग करता रहता हूं क्योंकि मुझे लगता है कि परीक्षण एक ही स्थान पर हैं और कुछ गुणों और विधियों को साझा करते हैं और चीजें मुझे स्पष्ट लगती हैं। फिर, मेरे रन कॉन्फ़िगरेशन में ग्रहण का उपयोग करके, मैं उस विकल्प को चुनता हूं "चयनित प्रोजेक्ट, पैकेज या स्रोत फ़ोल्डर में सभी परीक्षण चलाएं" और ये सभी परीक्षण केवल एक क्लिक के साथ किए जाएंगे।

public class TestBooksDAO { 

    private static BooksDAO dao; 

    @Parameter(0) 
    public String title; 
    @Parameter(1) 
    public String author; 

    @Before 
    public void init() { 
     dao = BooksDAO.getInstancia(); 
    } 

    /** Tests that run only once. */ 
    public static class SingleTests extends TestBooksDAO { 

     @Test(timeout=10000) 
     public void testGetAll() { 
      List<Book> books = dao.getBooks(); 
      assertNotNull(books); 
      assertTrue(books.size()>0); 
     } 

     @Test(timeout=10000) 
     public void testGetNone() { 
      List<Book> books = dao.getBooks(null); 
      assertNull(books); 
     } 
    } 

    /** Tests that run for each set of parameters. */ 
    @RunWith(Parameterized.class) 
    public static class ParameterizedTests1 extends TestBooksDAO { 

     @Parameters(name = "{index}: author=\"{2}\"; title=\"{0}\";") 
     public static Collection<Object[]> values() { 
      return Arrays.asList(new Object[][] { 
       {"title1", ""}, 
       {"title2", ""}, 
       {"title3", ""}, 
       {"title4", "author1"}, 
       {"title5", "author2"}, 
      }); 
     } 

     @Test(timeout=10000) 
     public void testGetOneBook() { 
      Book book = dao.getBook(author, title); 
      assertNotNull(book); 
     } 
    } 

    /** Other parameters for different tests. */ 
    @RunWith(Parameterized.class) 
    public static class ParameterizedTests2 extends TestBooksDAO { 

     @Parameters(name = "{index}: author=\"{2}\";") 
     public static Collection<Object[]> values() { 
      return Arrays.asList(new Object[][] { 
       {"", "author1"}, 
       {"", "author2"}, 
       {"", "author3"}, 
      }); 
     } 

     @Test(timeout=10000) 
     public void testGetBookList() { 
      List<Book> books = dao.getBookByAuthor(author); 
      assertNotNull(books); 
      assertTrue(books.size()>0); 
     } 
    } 
} 
संबंधित मुद्दे