2016-05-24 10 views
2

- 私のユニットの間に実行されていないようです:静的初期化子は、静的なユーティリティクラスのメソッドをテストする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)の種類にアクセスしています

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

static 
{ 
    GENRES.put(28, "Action"); 
    GENRES.put(12, "Adventure"); 
    GENRES.put(16, "Animation"); 
    . 
    . 
} 
0:この静的マップ・オブジェクトは静的初期化子を介してデータで充填されるべき

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

:それは整数キーを使用して文字列値を取得しています

問題は、テストが実行されるときにマップオブジェクトがヌルで、データで満たされないためテストが失敗するということです。プログラム自体は正常に動作し、データが含まれています。誰がなぜテスト中にこれは異なるアイデアですか?私はJUnit 4.12を使用していますが、これはアンドロイド環境で行われています

+2

[MCVE]を投稿してください。 –

+0

'Genres'変数がどこにどのように宣言され、割り当てられているかを知る必要があります。 – SamTebbs33

+0

宣言を更新しました – Lemao1981

答えて

0

OK、SparseArrayやContentValuesのようなアンドロイドフレームワーククラスがテスト中のメソッドで使用されている場合は、インストゥルメントユニットテストとしてテストを実行する必要がありますandroidTest)、そうでなければこれらのオブジェクトは初期化されません。

関連する問題