2016-05-24 2 views
2

I'm модульного тестирования метода статической полезности класса:статический инициализатор, кажется, не работать во время тестов JUnit

@Test 
public void createGenreString() 
{ 
    //Arrange 
    String expected1 = "Action, Adventure, Animation, 

    //Act 
    String actual1 = Utils.createGenreString(new int[]{28, 12, 16, 35}); 

    //Assert 
    assertThat(actual1, is(equalTo(expected1))); 
} 

Этого статический метод с доступом вида объекта статической карты (MovieDbContract.GENRES), из который он извлекает значения String, используя Integer ключи:

public static String createGenreString(int[] genreIds) 
{ 
    StringBuilder sb = new StringBuilder(); 
    int length = genreIds.length; 
    for (int i = 0; i < length && genreIds[i] != 0; i++) 
    { 
     if (i != 0) sb.append(", "); 
     String genre = MovieDbContract.GENRES.get(genreIds[i]); 
     sb.append(genre != null ? genre : "Unknown"); 
    } 
    return sb.toString(); 
} 

этот статический объект карты должны быть заполнены данными через статический инициализатор:

public static final SparseArray<String> GENRES = new SparseArray<>(); 

static 
{ 
    GENRES.put(28, "Action"); 
    GENRES.put(12, "Adventure"); 
    GENRES.put(16, "Animation"); 
    . 
    . 
} 

проблема заключается в том, что при запуске теста объект карты имеет значение null, он не заполняется данными, поэтому тест не выполняется. но сама программа прекрасно работает с данными. кто-нибудь идея, почему во время тестов это другое? Я использую JUnit 4.12, и все это делается в среде Android.

+2

Пожалуйста, отправьте сообщение [MCVE]. –

+0

Нам нужно посмотреть, где и как объявлена ​​и назначена переменная 'Genres'. – SamTebbs33

+0

обновил объявление – Lemao1981

ответ

0

ОК, выяснилось, что всякий раз, когда в тестируемых методах используются классы фреймворка android, такие как SparseArray или ContentValues, вы должны запустить тест в качестве инструментального модульного теста (androidTest) на эмуляторе или устройстве, иначе эти объекты не будут инициализированы так, как они должны