2013-02-05 16 views
5

मैं अपने एंड्रॉयड आवेदन के लिए टेस्ट स्वीट बनाने और इस स्थापना विधि है हूँचल रहा है एंड्रॉयड टेस्ट सेटअप() विधि कई बार

private static final String TAG_NAME = "TESTING_SUITE"; 
     public TestingMusicDAO musicDAO; 
     public List<Song> songs; 
     public Instrumentation instr; 
     MusicService musicService; 
    @Override 
    public void setUp() throws Exception { 
     instr = this.getInstrumentation(); 
     Log.d(TAG_NAME, "Setting up testing songs"); 
     musicDAO = new TestingMusicDAO(instr.getContext()); 
     musicService = new MusicServiceImpl(musicDAO); 
     musicDAO.getAllSongsFromFile(); 
     songs = musicDAO.getAllSongs(); 
     for(Song song : songs) 
      Log.d(TAG_NAME, song.toString()); 
    } 

और फिर इन परीक्षणों जो एक से एक अजगर उपकरण द्वारा बनाई गई हैं है कहा जाता हो जाता है टेक्स्ट फ़ाइल

public void test1() { 
    List<Song> testPlaylist; 
    String testArtist = ("The Beatles"); 
    String actualArtist = ("TheBeatles"); 
    testPlaylist = testingPlaySongsByKeyword(testArtist); 
    if(testPlaylist.isEmpty()){ 
     fail("No Songs Were Found"); 
    } else { 
     for(Song loopsongs : testPlaylist){ 
      if (!(loopsongs.getArtist().equals(actualArtist))){ 
       fail("Song Doesnt Contain the artist" + actualArtist + "... Contains ->" + loopsongs.getArtist()); 
      } 
     } 
    } 
} 

और हर बार इनमें से एक को MusicDAO कहा जाता है पुनर्जन्म दिया जाता है। मैं सेटअप विधि को

उत्तर

5

कहने से कैसे रोक सकता हूं। जुनीट का डिज़ाइन यह है कि setUp() और tearDown()प्रति परीक्षण पर एक बार किया जाता है। यदि आप इसे प्रति कक्षा में करना चाहते हैं, तो इसे कन्स्ट्रक्टर में करें। बस सुनिश्चित करें कि आप कक्षाओं के अंदर कुछ भी नहीं बदलते हैं। परीक्षण प्रति बार एक बार ऐसा करने का कारण यह सुनिश्चित करना है कि सभी परीक्षण एक ही डेटा से शुरू हो जाएं।

+0

तो मैं टेस्ट क्लास का कन्स्ट्रक्टर बनाउंगा? –

+0

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

+0

ठीक है, प्रत्येक टेस्ट –

0

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

static int testsExecutedSoFar = 0; 
static boolean isFirstRun = true; 

@Override 
protected void setUp() throws Exception { 
    if(isFirstRun){ 
     createDb(); 
     isFirstRun = false; 
    }  
} 

@Override 
protected void tearDown() throws Exception{ 
    testsExecutedSoFar++; 
    if (testsExecutedSoFar == totalNumberOfTestCases()) 
     deleteDb();  
} 

private int totalNumberOfTestCases() { 
    return countTestCases()+1; //have to add one for testandroidtestcasesetupproperly added by AndroidTestCase 
} 

क्षेत्रों के बाद से JUnit के लिए वर्ग का एक नया उदाहरण बनाता है स्थिर होना जरूरी प्रत्येक रन जादू 1 को जोड़ा जाना था क्योंकि एंड्रॉइडटेस्टकेस ने टेस्ट सूट में अपना टेस्ट (testandroidtestcasesetupproperly) जोड़ दिया है, लेकिन यह countTestCases() द्वारा लौटाई गई संख्या की गणना नहीं करता है।

बदसूरत तरफ थोड़ा सा, लेकिन यह चाल है।

1

आप जुनीट से @BeforeClass और @AfterClass एनोटेशन का उपयोग कर सकते हैं।

@BeforeClass 
public static void test_setUp_Once(){ 
    // Code which you want to be executed only once 
    createDb(); 
} 

@AfterClass 
public static void test_tearDown_Once(){ 
    // Code which you want to be executed only once 
    deleteDb(); 
} 

ध्यान दें: आप इन तरीकों static घोषित करने के लिए ठीक से काम करने की जरूरत है।

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