Newsgroup: it.comp.java
Titolo: jUnit come definire l'ordine dei test?

Ciao,
ho la mia classettina fatta con JUnit... ho una serie di test tra i quali:
    public void testCreate()
    public void testFindByPrimaryKey()
    public void testFindAll()
    public void testFindByDescrizioneLike()
    public void testFindByCodiceProdotto()
    public void testGetDettaglioAttivita()
    public void testSetAttivitaView()
Voglio che i test vengano eseguiti in questo ordine, cioč come li ho
definiti nella classe. C'č modo di controllarlo?
Luigi

Trovato da me la risposta... :-(
Because the tests are isolated, they can be run in any order.
Non è una limitazione??? Volevo che la mia testCreate fosse eseguita per
prima per poi chiamare metodi sugli oggetti creati, e quindi infine la che
fosse chiamata la testRemove...
Non si può fare vero?
Luigi

 fosse chiamata la testRemove...
setUp() e tearDown() mi pare (cerca i nomi corretti) vengono chiamati
prima e dopo il test.
-- 
Bye,
  Mirko

 prima e dopo il test.
Sě, prima e dopo ciascuno dei test... ho verificato :-)
Qualcuno mi sa dire se questa classe di test č sensata?
package it......test.attivita;
import java.sql.Date;
import java.util.*;
import javax.naming.*;
import javax.rmi.*;
import it.csi.jsf.sini.bean.*;
import it.csi.jsf.sini.ejb.*;
import it.csi.jsf.sini.ejb.attivita.*;
import it.csi.jsf.sini.ejb.prodotto.*;
import junit.framework.*;
import junit.textui.*;
public class TestAttivita extends TestCase {
    private AttivitaHome attivitaHome;
    private ProdottoHome prodottoHome;
    private DettaglioAttivitaHome dettaglioHome;
    private Prodotto p;
    private Attivita a, a2, a3;
    private DettaglioAttivita d1, d2, d3, d4, d5, d6;
    public TestAttivita(String name) {
        super(name);
        init();
    }
    public void init() {
        try {
            Context ctx = new InitialContext();
            attivitaHome = (AttivitaHome)PortableRemoteObject
                .narrow(ctx.lookup("sini/Attivita"), AttivitaHome.class);
            prodottoHome = (ProdottoHome)PortableRemoteObject
                .narrow(ctx.lookup("sini/Prodotto"), ProdottoHome.class);
            dettaglioHome = (DettaglioAttivitaHome)PortableRemoteObject
                .narrow(ctx.lookup("sini/DettaglioAttivita"),
                        DettaglioAttivitaHome.class);
            ctx.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    public void setUp() throws Exception {
        p = prodottoHome.create(
            new ProdottoView(null, "$$$$", "prodotto di test$$$$", "$$$$",
                             null, "OK", "1.0", "1.0"));
        Long progressivo = p.getProgressivo();
        Date date = new Date(System.currentTimeMillis());
        a = attivitaHome.create(
            new AttivitaView(null,"$$$prova", date, date, "OK",
progressivo,
                             new Long(6), new Long(6), new Long(0), "OK",
                             new Long(0), new Long(0), new Long(0),
                             date, null));
        a2 = attivitaHome.create(
            new AttivitaView(null,"$$$prova2", date, date, "OK",
progressivo,
                             new Long(6), new Long(6), new Long(0), "OK",
                             new Long(0), new Long(0), new Long(0),
                             date, null));
        a3 = attivitaHome.create(
            new AttivitaView(null,"ciao", date, date, "OK",  progressivo,
                             new Long(6), new Long(6), new Long(0), "OK",
                             new Long(0), new Long(0), new Long(0),
                             date, null));
        DettaglioAttivitaView daw =
            new DettaglioAttivitaView(null,"ddd", date, date, "OK", "1",
                                      a.getCodiceAttivita(), "AAA");
        d1 = dettaglioHome.create(daw);
        d2 = dettaglioHome.create(daw);
        d3 = dettaglioHome.create(daw);
        daw.setCodiceAttivita(a2.getCodiceAttivita());
        d4 = dettaglioHome.create(daw);
        d5 = dettaglioHome.create(daw);
        daw.setCodiceAttivita(a3.getCodiceAttivita());
        d6 = dettaglioHome.create(daw);
    }
    public void tearDown() throws Exception{
        d1.remove();
        d2.remove();
        d3.remove();
        d4.remove();
        d5.remove();
        d6.remove();
        a.remove();
        a2.remove();
        a3.remove();
        p.remove();
    }
    public void testFindByPrimaryKey() throws Exception {
        attivitaHome.findByPrimaryKey(a.getCodiceAttivita());
    }
    public void testFindAll() throws Exception {
        Collection coll = attivitaHome.findAll();
        assertTrue(coll.size() >= 3);
        Iterator iter = coll.iterator();
        while (iter.hasNext()) {
            Attivita item = (Attivita)iter.next();
        }
    }
    public void testFindByDescrizioneLike() throws Exception {
        Collection coll = attivitaHome.findByDescrizioneLike("$$$");
        assertEquals(coll.size(), 2);
    }
    public void testFindByProgressivoProdotto() throws Exception {
        Collection coll = attivitaHome
            .findByProgressivoProdotto(p.getProgressivo());
        assertEquals(coll.size(), 3);
    }
    public void testGetDettaglioAttivita() throws Exception {
        Collection coll = null;
        coll = a.getDettaglioAttivita();
        assertEquals(coll.size(), 3);
        coll = a2.getDettaglioAttivita();
        assertEquals(coll.size(), 2);
        coll = a3.getDettaglioAttivita();
        assertEquals(coll.size(), 1);
    }
    public static void main(String[] args) {
        TestRunner.runAndWait(new TestSuite(TestAttivita.class));
    }
}

 import it.csi.jsf.sini.bean.*;
era per caso
package it.csi.jsf.sini   ?  ;)))
cmq mi sembra che la classe, su rapida occhiata abbia abbastanza senso, se
le assert che ti serve di verificare sono solo quelle che hai piazzato :)
Ciao e buon lavoro
Giuseppe

 le assert che ti serve di verificare sono solo quelle che hai piazzato :)
Sto cominciando ora a utilizzare JUnit... Il wizard di JBuilder genera dei
test che non estendono da Junit...
Non è mica tanto facile capire cosa testare :-)... e poi non vorrei
cominciare ad usare junit nel modo sbagliato.


Non ha senso :-)
Puoi usare (come gia' ti hanno fatto notare) setUp() e tearDown() che vengono eseguite
sempre e di sicuro prima e dopo di ogni test.
Ciao,
    Bruno.
---
| Bruno Bossola 
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola
|
| (rimuovere gli spazi dall'indirizzo per rispondere via email)

 cominciare ad usare junit nel modo sbagliato.
Stiamo sulla stessa barca, le sto usando anche io per la prima volta...sarà
una moda? ;) No sicuramente.....
Io uso Together Control Center 6.0, che a patto di avere RAM a quintali, è
un ottimo prodotto.
Ciaoo
Giuseppe

 un ottimo prodotto.
Io lo "usacchiavo" tempo fa (versione 3), giusto per giocare un po' con l'
UML e pensavo fosse fantastico. Ultimamente mi hanno detto di usare solo
quello per sviluppare un progetto e mi è passata la fantasia... meglio il
mio JBuilder :-) ognittanto ripiglio T/J giusto per fare un minimo di
progettazione.

aggiornamento... visto il funzionamento, ho avuto un parere molto favorevole
dalla mia 'capa' poco fa :-)

 progettazione.
Sono curioso di cosa ne pensi, io sono consulente per conto Togethersoft, ed
ovvio che i feedback vengono rigirati a loro. Io lo trovo buono, se sai
esattamente cosa fare (non intendo UML, ma usare i suoi diagrammi
proprietari, deployare un EAR è una cacchiata)
E' un ottimo strumento di modeling, design, sviluppo e test (ed anche deploy
su i più blasonati APP server, ad eccezione di OC4J, che ti pareva era
quello che serviva a me! :( ).
E' una buona norma disattivare la sincronizzazione del sorgente quando si
passa ad un altro task (che so, hai il sorgente aperto in modifica su
Ultraedit, e vuoi sincronizzare le modifiche su TCC) se pianifichi di usare
solo TCC per fare "tutto": ti risparmi un botto di deadlock e attese vane.
Ha un ottimo supporto per sviluppare test case e unit test. Cosa ha che non
va? A parte che non è freeware  (ma cmq sono liberamente disponibili le
API )  ;)  ma richiede un ammontare di RAM spaventoso, a casa con 640Mb di
ram va abbastanza bene....con il portatile a 256mb ho richisto più volte di
sclerare e gettarlo dalla finestra.
Ciao e buon lavoro!
Giuseppe

 sclerare e gettarlo dalla finestra.
A casa ho 256 MB di ram e ho usato più volte T/J con JBuilder ... Con win2k
funziona abbastanza. In ufficio ho 256MB con NT4... NT4 oltre che consumare
un pacco di memoria ha una pessima gestione della stessa, molto peggio di
win2k, e funziona in modo non proprio soddisfacente anche T/J da solo.
Sai quei dipendenti (mi viene in mente l'episodio in Xerox di qualche anno
fa) che un giorno entrano in ufficio con un ascia o con un fucile a pompa?
Probabilmente gli hanno chiesto di sviluppare in Java su un pentium 2 con 64
MB di RAM usando Together e Weblogic ;-)
Ciao!
Jigi