使用此方法使用调用方法 getRandomInt 中的随机值生成 ArrayList。我会断言什么来创建一个测试方法来测试 ArrayList 不包含重复项?
public static int getRandom(int min, int max) {
return random.nextInt((max - min) + 1) + min;
}
public static ArrayList<Integer> getRandomIntegers(int size, int min, int max) {
ArrayList<Integer> number = new ArrayList<Integer>();
while (number.size() < size) {
int random = getRandom(min, max);
if(!number.contains(random)) {
number.add(random);
}
}
return number;
}
Run Code Online (Sandbox Code Playgroud)
使用assertJ,这是直接的common-assertions-for-java-collections-in-assertj
@Test
public void noDuplicatesTest(){
List<Integer> numbers = Lists.newArrayList(1, 52, 12, 39, 45, 98, 100, 565, 6, 13);
assertThat(numbers).doesNotHaveDuplicates();
}
Run Code Online (Sandbox Code Playgroud)
事实上,你必须断言的不止这些。
要检查该方法的实际行为,您确实应该从返回的列表中断言:
Assert.assertEquals(size, list.size());
Assert.assertEquals(new HashSet<Long>(list).size(), actualList.size());
for (long v : list){
Assert.assertTrue(v " + " is not in the expected range", v >= min && v <= max);
}
正如 M. le Rutte 所强调的,我还认为方法 API 返回 a 更有意义,Set因为List元素的顺序不是预期的:数字是随机的。
附带说明一下,您的实施效率不高。
如果范围很大并且请求的大小接近范围大小,则循环的次数可能会超出所需的次数。
| 归档时间: |
|
| 查看次数: |
5562 次 |
| 最近记录: |