使用此方法,使用来自被调用方法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;
}
答案 0 :(得分:1)
事实上,你必须断言更多。
要检查方法的实际行为,您应该从返回的列表中断言:
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更有意义的是返回Set
而不是List
,因为不期望元素的顺序:数字是随机的。
作为旁注,你的实施效率不高 如果范围较大且尺寸要求接近范围大小,则可以循环远远超过要求。
答案 1 :(得分:0)
您可以将元素放入Set中,然后比较大小。
assert new HashSet(list).size() == list.size()
答案 2 :(得分:0)
另一种方法是将ArrayList
从Integers
填充到最小值,然后调用
Collections.shuffle(aList)
。
答案 3 :(得分:0)
您可以执行此操作以检查是否没有重复项,
assertEquals(number.size(),number.stream().distinct().collect(Collectors.toList()).size());
其中number
是您的arrayList。
使用此
import static junit.framework.Assert.assertEquals
答案 4 :(得分:0)
使用 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();
}