加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – static initializer似乎在junit测试期间不运行

发布时间:2020-12-15 02:14:52 所属栏目:Java 来源:网络整理
导读:我单元测试一个静态实用程序类的方法: @Testpublic void createGenreString(){ //Arrange String expected1 = "Action,Adventure,Animation,//Act String actual1 = Utils.createGenreString(new int[]{28,12,16,35}); //Assert assertThat(actual1,is(equa
我单元测试一个静态实用程序类的方法:

@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值:

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");
    .
    .
}

现在的问题是,当测试运行时,map对象为null,它没有填充数据,因此测试失败.但程序本身工作正常,包含数据.任何人都知道为什么在测试期间这是不同的?我正在使用JUnit 4.12,这一切都是在Android环境中完成的

解决方法

好吧,发现每当在测试的方法中使用像SparseArray或ContentValues这样的android框架类时,你必须在模拟器或设备上运行测试作为检测单元测试(androidTest),否则这些对象不会像他们应该那样初始化

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读