Запуск метода Android SetUp () вызывается несколько раз

Я создаю набор тестов для моего приложения для Android и имею этот метод setUp

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() ); } 

И затем эти тесты, созданные инструментом python из текстового файла

 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, регенерируется. Как остановить вызов метода установки

Вы этого не делаете. Дизайн JUnit состоит в том, что setUp() и tearDown() выполняются один раз за тест . Если вы хотите, чтобы это было сделано для каждого класса, сделайте это в конструкторе. Просто убедитесь, что вы ничего не изменяете внутри классов. Причина, по которой это делается за один тест, состоит в том, чтобы убедиться, что все тесты начинаются с одних и тех же данных.

Вы можете использовать аннотации @BeforeClass и @AfterClass от JUnit.

 @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 для правильной работы.

У меня была такая же основная проблема. Я хочу проверить структуру моей базы данных, поэтому я создаю ее в методе setUp и удаляю ее в tearDown. Использование конструктора не решило бы мою потребность в удалении базы данных после выполнения всех моих тестов, поэтому я использовал некоторую реентерабельную логику:

 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 нужно было добавить, так как AndroidTestCase добавляет собственный тест (testandroidtestcasesetupperly) в набор тестов, но он не учитывает число, возвращаемое countTestCases ().

Немного на уродливой стороне, но он сделал трюк.