gpt4 book ai didi

java - 静态初始化程序似乎在 junit 测试期间不运行

转载 作者:太空宇宙 更新时间:2023-11-03 11:03:19 25 4
gpt4 key购买 nike

我正在对静态实用程序类的方法进行单元测试:

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

此静态方法正在访问一种静态 map 对象 (MovieDbContract.GENRES),它使用整数键从中检索字符串值:

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

这个静态 map 对象应该通过静态初始化器填充数据:

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

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

现在的问题是,当测试运行时, map 对象为空,它没有填充数据,因此测试失败。但程序本身运行良好,包含数据。有人知道为什么在测试期间这是不同的吗?我正在使用 JUnit 4.12,所有这些都是在 android 环境中完成的

最佳答案

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

关于java - 静态初始化程序似乎在 junit 测试期间不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37418688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com