我正在尝试根据年龄对员工进行排序(简化示例),但是我无法进行单元测试。

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/

10-12 01:42