JUnit测试ArrayList元素是不是重复

时间:2018-05-26 06:45:43

标签: java junit

使用此方法,使用来自被调用方法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;
} 

5 个答案:

答案 0 :(得分:1)

事实上,你必须断言更多。
要检查方法的实际行为,您应该从返回的列表中断言:

  • 列表具有预期的大小

Assert.assertEquals(size, list.size());

  • 该列表不包含dup

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)

另一种方法是将ArrayListIntegers填充到最小值,然后调用 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();
}