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

dzi*_*iki 4 java junit unit-testing assert

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

排序方法覆盖类中的compare方法,Comparator并使用 对列表进行排序Collections.sort()

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

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

Long expected1 = listOfObjects.get(0).getId()
Long expected2 = listOfObjects.get(1).getId()
Long expected3 = listOfObjects.get(2).getId()
Run Code Online (Sandbox Code Playgroud)

然后在那些 Long 对象上使用断言看起来既不干净也不聪明。我正在寻找一个想法如何干净而巧妙地测试这个案例,但我没有想法......

Jea*_*art 5

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
}
Run Code Online (Sandbox Code Playgroud)