Search code examples
javajunitcomparator

how to test Comparator at junit test


I need to test this method - compare(). Can You get advice? How better I can do this(all part if, else-if, else).

public class AbsFigure {

class AreaCompare implements Comparator<FigureGeneral> {

    @Override
    public int compare(FigureGeneral oneFigure, FigureGeneral twoFigure) {
        double firstValue = oneFigure.area();
        double secondValue = twoFigure.area();
        int result = 0;

        if (firstValue > secondValue)
            result = 1;
        else if (firstValue < secondValue)
            result = -1;
        else
            result = 0;

        return result;
    }
}

After this recomendations - we have next picture (Thank YOU guys a lot!):

public AreaCompare areaCompare = new AreaCompare();

@Test
public void testEqual() {
    FigureGeneral oneFigure = new Rectangle(2.0, 2.0, "triangle");
    FigureGeneral twoFigure = new Rectangle(2.0, 2.0, "rectangle");
        int result = areaCompare.compare(oneFigure, twoFigure);
        assertTrue("expected to be equal", result == 0);
}

@Test
public void testGreaterThan() {
    FigureGeneral oneFigure = new Triangle(2.0, 2.0, "triangle");
    FigureGeneral twoFigure = new Rectangle(1.0, 1.0, "rectangle");
        int result = areaCompare.compare(oneFigure, twoFigure);
        assertTrue("expected to be greater than", result >= 1);
}

@Test
public void testLessThan() {
    FigureGeneral oneFigure = new Rectangle(1.0, 1.0, "rectangle");
    FigureGeneral twoFigure = new Triangle(2.0, 2.0, "triangle");
        int result = areaCompare.compare(oneFigure, twoFigure);
        assertTrue("expected to be less than", result <= -1);

All is normal testing now.


Solution

  • Just instantiate your comparator class and pass in objects:

    public class Test extends TestCase {
        class AreaCompare implements Comparator<FigureGeneral> {
    
            @Override
            public int compare(FigureGeneral oneFigure, FigureGeneral twoFigure) {
                double firstValue = oneFigure.area();
                double secondValue = twoFigure.area();
                int result = 0;
    
                if (firstValue > secondValue) {
                    result = 1;
                } else if (firstValue < secondValue) {
                    result = -1;
                } else {
                    result = 0;
                }
    
                return result;
            }
        }
    
        private final AreaCompare areaCompare = new AreaCompare();
    
        @Test
        public void testEqual() {
            FigureGeneral oneFigure = new FigureGeneral();
            FigureGeneral twoFigure = new FigureGeneral();
            int result = areaCompare.compare(oneFigure, twoFigure);
            assertTrue("expected to be equal", result == 0);
        }
    
        @Test
        public void testGreaterThan() {
            FigureGeneral oneFigure = new FigureGeneral();
            FigureGeneral twoFigure = new FigureGeneral();
            int result = areaCompare.compare(oneFigure, twoFigure);
            assertTrue("expected to be greater than", result >= 1);
        }
    
        @Test
        public void testLessThan() {
            FigureGeneral oneFigure = new FigureGeneral();
            FigureGeneral twoFigure = new FigureGeneral();
            int result = areaCompare.compare(oneFigure, twoFigure);
            assertTrue("expected to be less than", result <= -1);
        }
    }