Junit assertGreaterThan

di il
5 risposte

Junit assertGreaterThan

Ciao devo implementare un metodo alla classe org.junit.Assert

assertGreaterThan(T o1, T o2, java.util.Comparator<T> comparator) che verifichi che il primo oggetto sia più grande del secondo in base al comparator passato.

Inoltre voglio testarlo aggiungendo un test in org.junit.tests assertion.AssertionTest e devo usare il metodo di test equals() come riferimento.

La mia domanda è, come posso gestire i parametri in chiamata? Non so proprio come fare, se qualcuno potesse aiutarmi nella stesura del metodo di test e magari qualche chiarimento sull'uso di <T> ed Object sarebbe fantastico.
Un grosso grazie in anticipo.

/*
* Negative a<b
* Zero a=b
* Positive a>b
* */
public static <T> int assertGreaterThan(T o1, T o2, java.util.Comparator<T> comparator){
      return comparator.compare(o1, o2);
}

@Test
    public void equals() {
        Object o = new Object();
        assertEquals(o, o);
        assertEquals("abc", "abc");
        assertEquals(true, true);
        assertEquals((byte) 1, (byte) 1);
        assertEquals('a', 'a');
        assertEquals((short) 1, (short) 1);
        assertEquals(1, 1); // int by default, cast is unnecessary
        assertEquals(1l, 1l);
        assertEquals(1.0, 1.0, 0.0);
        assertEquals(1.0d, 1.0d, 0.0d);
    }


 @Test
    public <T> void assertGraterThanTest() {
        java.util.Comparator<T> comparator;
        .....
        assertGraterThan(o,o,comparator);
    }

5 Risposte

  • Re: Junit assertGreaterThan

    Fukaishiro ha scritto:


    
    /*
    * Negative a<b
    * Zero a=b
    * Positive a>b
    * */
    public static <T> int assertGreaterThan(T o1, T o2, java.util.Comparator<T> comparator){
          return comparator.compare(o1, o2);
    }
    
    Innanzitutto, scusa, quale sarebbe il senso/motivo di un metodo del genere? Non sta "asserendo" nulla. Sta solo invocando il compare sul comparator restituendo il suo risultato.
  • Re: Junit assertGreaterThan

    https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html
    Leggendo il doc ho pensato fosse giusto scrivere oggetto.metodo(..);
    Non capisco cosa ci sia di sbagliato, puoi dirmi cosa avrei dovuto fare per implementare il metodo correttamente? così da verificare che il primo oggetto sia superiore al secondo? pensavo inoltre fosse corretto restituire l'int del risultato come da funzione da libreria e lasciare all'utente l'interpretazione di tale risultato in base alle sue esigenze... di solito è così che si fa no?
  • Re: Junit assertGreaterThan

    Fukaishiro ha scritto:


    https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html
    Leggendo il doc ho pensato fosse giusto scrivere oggetto.metodo(..);
    Non capisco cosa ci sia di sbagliato
    No, non è tecnica la questione, ma concettuale.
    Perché qualcuno dovrebbe chiamare il tuo metodo assertGreaterThan quando potrebbe chiamare direttamente il compare sul comparator?
    Quale è l'utilità del tuo assertGreaterThan? Poi "assert" (asserimento) di che cosa??
  • Re: Junit assertGreaterThan

    Comunque la domanda riguarda principalmente l'implementazione del test, vorrei capire quello, grazie
  • Re: Junit assertGreaterThan

    Fukaishiro ha scritto:


    Comunque la domanda riguarda principalmente l'implementazione del test, vorrei capire quello, grazie
    Allora: al tuo metodo assertGreaterThan si deve passare un oggetto che implementa Comparator. Ora: oggetto Comparator di QUALE classe? Il punto è quello. Deve essere un oggetto creato ovviamente in un qualche modo.

    Dico subito che la soluzione migliore sarebbe usare una libreria di mocking come Mockito che serve per creare oggetti mock, "fittizi". Un mock lo puoi "instrumentare" per farlo comportare come vuoi.

    Ecco lo scenario nel tuo caso: crei un mock di Comparator ed otterrai un oggetto (di quale classe NON interessa, è una cosa interna a Mockito) che puoi "instrumentare" tu come vuoi.
    Configuri il mock così, dicendogli in sostanza: se ti arriva una invocazione di compare con gli argomenti "a" e "z" (o altro a tua scelta), fai restituire il valore -1 (perché ovviamente "a" è minore di "z").

    Poi nel tuo test invochi assertGreaterThan passandogli "a", "z" e il mock di Comparator. assertGreaterThan restituirà un valore int, che tu verificherai sia effettivamente minore di 0.


    Se NON vuoi usare una libreria di mocking, l'oggetto Comparator lo devi costruire tu. Come? Ci sono diverse possibilità.
Devi accedere o registrarti per scrivere nel forum
5 risposte