列表排序实现的单元测试?

时间:2015-11-12 16:39:53

标签: java unit-testing junit assert

我目前正在编写一个单元测试,用于检查方法是否正确排序列表。

排序方法正在使用compare覆盖Comparator方法,并使用Collections.sort()对列表进行排序。

这可能不是技术问题,但我正在寻找一种方法来使用JUnit的断言来检查列表是否正确排序......

列表按其所持类型的内部参数排序,我称之为id。因此,当列表中包含3个ID为3的项目时,它们将被分类为1,2,3。

Long expected1 = listOfObjects.get(0).getId()
Long expected2 = listOfObjects.get(1).getId()
Long expected3 = listOfObjects.get(2).getId()

然后在那些Long物体上使用asserions,看起来既干净又不聪明。我正在寻找一个如何干净巧妙地测试这个案例的想法,但我没有想法...

2 个答案:

答案 0 :(得分:4)

IMO,您应该对您编写的compare方法进行单元测试。 Collections.sort()已经过严格测试!

只需进行一次简单的最终测试,以确保您编写的方法正确调用Collections.sort()

private final MyComparator comparator = new MyComparator();

@Test
public greaterTest() {
    MyObject o1 = new MyObject(2);
    MyObject o2 = new MyObject(1);
    int c = comparator.compare(o1, o2);
    // assert that c is > 0
}

@Test
public lowerTest() {
    MyObject o1 = new MyObject(1);
    MyObject o2 = new MyObject(2);
    int c = comparator.compare(o1, o2);
    // assert that c is < 0
}

@Test
public equalTest() {
    MyObject o1 = new MyObject(2);
    MyObject o2 = new MyObject(2);
    int c = comparator.compare(o1, o2);
    // assert that c is == 0
}

@Test
public sortTest() {
    List<MyObject> os = // ...
    // call to the function that makes the call to Collections.sort
    List<MyObject> expected = // sorted version of os
    // assert that the sorted list is equal to the expected one
}

答案 1 :(得分:1)

查看我的演示文稿,其中包含有关解决问题的asserting on listsshazamcrest库的观点。

有了它,您可以assertThat(actual, sameBeanAs(asList(a, b, c))),其中abc是您的任何类型的对象。