cómo probar el Comparador de a prueba de junit

Tengo que probar este método – compare(). Usted puede obtener asesoramiento? Cómo puedo hacer esto(toda la parte 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;
    }
}

Después de esto recomendaciones – tenemos la siguiente imagen (Gracias chicos un montón!):

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);

Todo es normal ahora las pruebas.

OriginalEl autor nazar_art | 2013-01-03

5 respuestas

  1. 13

    Acaba de crear una instancia de su comparador de clase y pase en objetos:

    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);
        }
    }
    Tenga en cuenta que un comparador no está obligado a devolver exactamente -1 para los más pequeños o exactamente 1 para valores mayores. Negativo / positivo número va a hacer.
    pero usted necesita reemplazar este método – private void assertTrue(String mensaje, int resultValue, int compareValues) { }
    Está inicializando oneFigure y twoFigure de la misma manera en cada una de las pruebas. Esto podría resultar en un NullPointerException o en al menos una prueba en su defecto (dependiendo del constructor de FigureGeneral).

    OriginalEl autor munyengm

  2. 2

    Recientemente tuve un requisito similar y vino para arriba con algunos métodos auxiliares (no publicada como API sin embargo, a pesar de que). Aquí está el código fuente:

    https://github.com/SoftSmithy/softsmithy-lib/blob/develop/softsmithy-lib-core/src/test/java/org/softsmithy/lib/Tests.java

    Aquí es una prueba, que utiliza estos métodos de utilidad:

    https://github.com/SoftSmithy/softsmithy-lib/blob/develop/softsmithy-lib-core/src/test/java/org/softsmithy/lib/util/PositionableComparatorTest.java

    es redirets a http://sourceforge.net/p/softsmithy/_list/hg. Usted puede simplemente más allá de su código exactamente la respuesta?

    OriginalEl autor Puce

  3. 1

    Se ve buena para mí. Tal vez deshacerse de result

    class AreaCompare implements Comparator<FigureGeneral> {
    
        @Override
        public int compare(FigureGeneral oneFigure, FigureGeneral twoFigure) {
            double firstValue = oneFigure.area();
            double secondValue = twoFigure.area();
            if (firstValue > secondValue)
                return 1;
            else if (firstValue < secondValue)
                return -1;
            return 0;
        }
    }

    Escribir al menos un caso de prueba. Uno para cada valor de retorno.

    compare(a, b) debe tener distinto signo que compare(b, a) o

    compare(a, b) == compare(b, a) == 0

    OriginalEl autor MrSmith42

  4. 0

    Después de un poco de consejo, una buena prueba:

        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);
    }

    OriginalEl autor nazar_art

  5. 0

    Puede ser mejor prueba para el contrato, y no para el -1/0/1 los valores (o, más precisamente, cualquier positiva/cero/valor negativo). Esto se puede hacer con Hamcrest dispositivos de correspondencia de una manera muy concisa. Considere el siguiente ejemplo:

    import static org.hamcrest.Matchers.comparesEqualTo;
    import static org.hamcrest.Matchers.greaterThan;
    import static org.hamcrest.Matchers.lessThan;
    
    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");
        assertThat(oneFigre comparesEqualTo(twoFigure));
        assertThat(twoFigure, comparesEqualTo(oneFigure));
    }
    
    @Test
    public void testGreaterThan() {
        FigureGeneral oneFigure = new Triangle(2.0, 2.0, "triangle");
        FigureGeneral twoFigure = new Rectangle(1.0, 1.0, "rectangle");
        assertThat(oneFigure, greaterThan(twoFigure));
    }
    
    @Test
    public void testLessThan() {
        FigureGeneral oneFigure = new Rectangle(1.0, 1.0, "rectangle");
        FigureGeneral twoFigure = new Triangle(2.0, 2.0, "triangle");
        assertThat(oneFigure, lessThan(twoFigure));
    }

    Por lo tanto usted no tiene que recordar que el valor representa lo que y las pruebas que hacen a la intención clara.

    OriginalEl autor kap

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *