我目前正在编写一个单元测试,用于检查方法是否正确排序列表。
排序方法正在使用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,看起来既干净又不聪明。我正在寻找一个如何干净巧妙地测试这个案例的想法,但我没有想法...
答案 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 lists和shazamcrest库的观点。
有了它,您可以assertThat(actual, sameBeanAs(asList(a, b, c)))
,其中a
,b
和c
是您的任何类型的对象。