我正在尝试根据年龄对员工进行排序(简化示例),但是我无法进行单元测试。
public class Employee{
private int age;
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
}
我的比较器如下所示:
class AgeComparator implements Comparator<Employee>{
public int compare(Employee emp1, Employee emp2){
int emp1Age = emp1.getAge();
int emp2Age = emp2.getAge();
if(emp1Age > emp2Age)
return 1;
else if(emp1Age < emp2Age)
return -1;
else
return 0;
}
}
而我的单元测试:
public class AgeComparatorTest {
@Test
public void testAge(){
Employee e1 = new Employee();
e1.setAge(4);
Employee e2 = new Employee();
e2.setAge(7);
List<Employee> employeeList = new ArrayList<Employee>();
employeeList.add(e1);
employeeList.add(e2);
Collections.sort(employeeList, new AgeComparator());
Employee actual = employeeList.get(0);
Assert.assertEquals(e2.getAge(), actual.getAge());
}
}
我期望7岁的员工比4岁早,但我能做到。
junit.framework.AssertionFailedError:预期:,但是:
最佳答案
您按升序对它们进行排序,因此这恰好是代码的预期行为。
请注意,您可以像这样简化您的Comparator
以获得所需的行为,您不必完全返回-1/1
,任何正数或负数int
都可以。
[编辑]
正如@JBNizet在评论中指出的那样,仅在比较器中返回emp2.getAge() - emp1.getAge()
可能会为大值溢出。例如,最好使用Guava
Ints.compare()
方法:
class AgeComparator implements Comparator<Employee>{
public int compare(Employee emp1, Employee emp2){
return Ints.compare(emp2.getAge(), emp1.getAge());
}
}
关于java - 我的比较器怎么了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11708999/