Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [JAVA] Esercizio base, aiuto ve ne prego.

    Ciao a tutti,
    appena registrata al forum, anche se in passato vi ho letto tantissimo in altre sezioni (html),
    mi presento, sono Rosalba, 17 anni da Frosinone,
    ho iniziato un corso Java e sono subito qui a chiedervi aiuto,
    ho davanti a me il primo Homework assegnatomi.


    Ho un sorgente da importare in Eclipse
    alla quale devo fare quanto segue


    Esercizio 1 (Testing)


    • Scrivere le classi di test JUnit per le classi
    Stanza, Partita


    • Scrivere almeno tre metodi di test per ciascuno
    dei metodi più importanti di queste classi


    • Perseguire la qualità dei test, in particolare la
    loro minimalità.
    Allo scopo scrivere test-case


    brevi e coincisi: che utilizzino meno oggetti possibile ed in uno stato iniziale più semplice possibile


    fattorizzati: senza codice duplicato ma evitando di
    comprometterne leggibilità ed autocontenimento


    indipendenti: che evitino di ripetere scenari di test già
    coperti da altri test-case



    Qui ho il src Stanza.java




    codice:
    public class Stanza {
    	private static final int NUMERO_MASSIMO_DIREZIONI = 4;
    	private static final int NUMERO_MASSIMO_ATTREZZI = 10;
    	private String nome;
        private Attrezzo[] attrezzi;
        private int numeroAttrezzi;
        private Stanza[] stanzeAdiacenti;
        private int numeroStanzeAdiacenti;
    	private String[] direzioni;
        
        /**
         * Crea una stanza. Non ci sono stanze adiacenti, non ci sono attrezzi.
         * @param nome il nome della stanza
         */
        public Stanza(String nome) {
            this.nome = nome;
            this.numeroStanzeAdiacenti = 0;
            this.numeroAttrezzi = 0;
            this.direzioni = new String[NUMERO_MASSIMO_DIREZIONI];
            this.stanzeAdiacenti = new Stanza[NUMERO_MASSIMO_DIREZIONI];
            this.attrezzi = new Attrezzo[NUMERO_MASSIMO_ATTREZZI];
        }
    
    
        /**
         * Imposta una stanza adiacente.
         *
         * @param direzione direzione in cui sara' posta la stanza adiacente.
         * @param stanza stanza adiacente nella direzione indicata dal primo parametro.
         */
        public void impostaStanzaAdiacente(String direzione, Stanza stanza) {
            boolean aggiornato = false;
        	for(int i=0; i<this.direzioni.length; i++)
            	if (direzione.equals(this.direzioni[i])) {
            		this.stanzeAdiacenti[i] = stanza;
            		aggiornato = true;
            	}
        	if (!aggiornato)
        		if (this.numeroStanzeAdiacenti < NUMERO_MASSIMO_DIREZIONI) {
        			this.direzioni[numeroStanzeAdiacenti] = direzione;
        			this.stanzeAdiacenti[numeroStanzeAdiacenti] = stanza;
        		    this.numeroStanzeAdiacenti++;
        		}
        }
    
    
        /**
         * Restituisce la stanza adiacente nella direzione specificata
         * @param direzione
         */
    	public Stanza getStanzaAdiacente(String direzione) {
            Stanza stanza = null;
    		for(int i=0; i<this.numeroStanzeAdiacenti; i++)
            	if (this.direzioni[i].equals(direzione))
            		stanza = this.stanzeAdiacenti[i];
            return stanza;
    	}
    
    
        /**
         * Restituisce la nome della stanza.
         * @return il nome della stanza
         */
        public String getNome() {
            return this.nome;
        }
    
    
        /**
         * Restituisce la descrizione della stanza.
         * @return la descrizione della stanza
         */
        public String getDescrizione() {
            return this.toString();
        }
    
    
        /**
         * Restituisce la collezione di attrezzi presenti nella stanza.
         * @return la collezione di attrezzi nella stanza.
         */
        public Attrezzo[] getAttrezzi() {
            return this.attrezzi;
        }
    
    
        /**
         * Mette un attrezzo nella stanza.
         * @param attrezzo l'attrezzo da mettere nella stanza.
         * @return true se riesce ad aggiungere l'attrezzo, false atrimenti.
         */
        public boolean addAttrezzo(Attrezzo attrezzo) {
            if (this.numeroAttrezzi < NUMERO_MASSIMO_ATTREZZI) {
            	this.attrezzi[numeroAttrezzi] = attrezzo;
            	this.numeroAttrezzi++;
            	return true;
            }
            else {
            	return false;
            }
        }
    
    
       /**
    	* Restituisce una rappresentazione stringa di questa stanza,
    	* stampadone la descrizione, le uscite e gli eventuali attrezzi contenuti
    	* @return la rappresentazione stringa
    	*/
        public String toString() {
        	String s = new String();
        	s += this.nome;
        	s += "\nUscite: ";
        	for (String direzione : this.direzioni)
        		if (direzione!=null)
        			s += " " + direzione;
        	s += "\nAttrezzi nella stanza: ";
        	for (Attrezzo attrezzo : this.attrezzi) {
        		s += attrezzo.toString()+" ";
        	}
        	return s;
        }
    
    
        /**
    	* Controlla se un attrezzo esiste nella stanza (uguaglianza sul nome).
    	* @return true se l'attrezzo esiste nella stanza, false altrimenti.
    	*/
    	public boolean hasAttrezzo(String nomeAttrezzo) {
    		boolean trovato;
    		trovato = false;
    		for (Attrezzo attrezzo : this.attrezzi) {
    			if (attrezzo.getNome().equals(nomeAttrezzo))
    				trovato = true;
    		}
    		return trovato;
    	}
    
    
    	/**
         * Restituisce l'attrezzo nomeAttrezzo se presente nella stanza.
    	 * @param nomeAttrezzo
    	 * @return l'attrezzo presente nella stanza.
         * 		   null se l'attrezzo non e' presente.
    	 */
    	public Attrezzo getAttrezzo(String nomeAttrezzo) {
    		Attrezzo attrezzoCercato;
    		attrezzoCercato = null;
    		for (Attrezzo attrezzo : this.attrezzi) {
    			if (attrezzo.getNome().equals(nomeAttrezzo))
    				attrezzoCercato = attrezzo;
    		}
    		return attrezzoCercato;	
    	}
    
    
    	/**
    	 * Rimuove un attrezzo dalla stanza (ricerca in base al nome).
    	 * @param nomeAttrezzo
    	 * @return true se l'attrezzo e' stato rimosso, false altrimenti
    	 */
    	public boolean removeAttrezzo(Attrezzo attrezzo) {
    		// da implementare
    		return false;
    	}
    
    
    
    
    	public String[] getDirezioni() {
    		String[] direzioni = new String[this.numeroStanzeAdiacenti];
    	    for(int i=0; i<this.numeroStanzeAdiacenti; i++)
    	    	direzioni[i] = this.direzioni[i];
    	    return direzioni;
        }
    
    
    }

    mentre qui


    Partita.java


    codice:
    public class Partita {
    	private Stanza stanzaCorrente;
    	private Stanza stanzaVincente;
    	private boolean finita;
    	private int cfu;
    	private static int CFU_INIZIALI = 20;
    	
    	public Partita(){
    		creaStanze();
    		this.finita = false;
    		this.cfu = CFU_INIZIALI;
    	}
    
    
        /**
         * Crea tutte le stanze e le porte di collegamento
         */
        private void creaStanze() {
    
    
    		/* crea gli attrezzi */
        	Attrezzo lanterna = new Attrezzo("lanterna",3);
    		Attrezzo osso = new Attrezzo("osso",1);
        	
    		/* crea stanze del labirinto */
    		Stanza atrio = new Stanza("Atrio");
    		Stanza aulaN11 = new Stanza("Aula N11");
    		Stanza aulaN10 = new Stanza("Aula N10");
    		Stanza laboratorio = new Stanza("Laboratorio Campus");
    		Stanza biblioteca = new Stanza("Biblioteca");
    		
    		/* collega le stanze */
    		atrio.impostaStanzaAdiacente("nord", biblioteca);
    		atrio.impostaStanzaAdiacente("est", aulaN11);
    		atrio.impostaStanzaAdiacente("sud", aulaN10);
    		atrio.impostaStanzaAdiacente("ovest", laboratorio);
    		aulaN11.impostaStanzaAdiacente("est", laboratorio);
    		aulaN11.impostaStanzaAdiacente("ovest", atrio);
    		aulaN10.impostaStanzaAdiacente("nord", atrio);
    		aulaN10.impostaStanzaAdiacente("est", aulaN11);
    		aulaN10.impostaStanzaAdiacente("ovest", laboratorio);
    		laboratorio.impostaStanzaAdiacente("est", atrio);
    		laboratorio.impostaStanzaAdiacente("ovest", aulaN11);
    		biblioteca.impostaStanzaAdiacente("sud", atrio);
    
    
            /* pone gli attrezzi nelle stanze */
    		aulaN10.addAttrezzo(lanterna);
    		atrio.addAttrezzo(osso);
    
    
    		// il gioco comincia nell'atrio
            stanzaCorrente = atrio;  
    		stanzaVincente = biblioteca;
        }
    
    
    	public Stanza getStanzaVincente() {
    		return stanzaVincente;
    	}
    
    
    	public void setStanzaCorrente(Stanza stanzaCorrente) {
    		this.stanzaCorrente = stanzaCorrente;
    	}
    
    
    	public Stanza getStanzaCorrente() {
    		return this.stanzaCorrente;
    	}
    	
    	/**
    	 * Restituisce vero se e solo se la partita e' stata vinta
    	 * @return vero se partita vinta
    	 */
    	public boolean vinta() {
    		return this.getStanzaCorrente()== this.getStanzaVincente();
    	}
    
    
    	/**
    	 * Restituisce vero se e solo se la partita e' finita
    	 * @return vero se partita finita
    	 */
    	public boolean isFinita() {
    		return finita || vinta() || (cfu == 0);
    	}
    
    
    	/**
    	 * Imposta la partita come finita
    	 *
    	 */
    	public void setFinita() {
    		this.finita = true;
    	}
    
    
    	public int getCfu() {
    		return this.cfu;
    	}
    
    
    	public void setCfu(int cfu) {
    		this.cfu = cfu;		
    	}	
    }



    Non voglio la pappa pronta!!!! ( ho letto il regolamento )
    Sono qui per chiedervi un enorme mano, per me al momento è tutto arabo.
    Se qualcuno cosi gentile riesce a spiegarmi meglio cosa devo fare, mi farebbe un enorme piacere.


    Il Top sarebbe un - ESEMPIO - di test su una classe,
    cosi dall'esempio riesco a capire sicuramente meglio il tutto e farlo anche sulle altre classi.


    Sò di chiedere tanto.


    Eventualmente,
    Grazie.


    Rosalba

  2. #2
    Qui una guida per principianti

    http://crunchify.com/simple-junit-4-...world-example/ (una delle tante)

    Il concetto è che crei dei test per testare il corretto comportamento dell'oggetto nelle situazioni previste. Ad esempio, prendendo a riferimento la classe Stanza, potresti fare dei test per verificare che:

    - aggiungo un attrezzo e mi torna true
    - aggiungo un attrezzo e lo ritrovo con l'hasAttrezzo
    - se raggiungo il numero massimo di attrezzi per la stanza mi torna false

    oppure puoi controllare in analoga maniera i metodi per spostarsi tra le stanze. Quello poi che ti sta dicendo è che il test deve partire da uno stato iniziale dell'oggeto ben preciso e portare l'oggetto in uno stato successivo compiendo meno operazioni possibili, ovvero il test deve testare solo l'effettiva funzionalità di interesse, coinvolgendo il meno possibile le altre funzionalità altrimenti perde di efficacia. Un test poi ha poche righe di codice a test, mi pare che normalmente si considerino buona pratica un 20 righe di codice al piu, ma anche meno, appunto perchè ti serve testare una specifica funzionalità usando già un oggetto nello stato di partenza di interesse. Per non parlare poi di usare stub e mock vari ma credo esuli dall'esercizio questa parte.

    Insomma prova a buttare giù qualcosa poi si corregge o si consiglia
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Gentilissimo Santino, mi leggo la guida e provo a butto giù qualcosa.
    Grazie!

  4. #4
    Aiutino..!

    codice:
        public void setStanzaCorrente(Stanza stanzaCorrente) {
            this.stanzaCorrente = stanzaCorrente;
        }
    codice:
        @Before
        public void setUp() throws Exception {
            this.partitaTest = new Partita(); 
            this.atrio = new Stanza("Atrio");
            this.biblioteca = new Stanza("Biblioteca");
            this.partitaTest.getNuovoLabirinto().setStanzaVincente(atrio); 
            this.partitaTest.getNuovoLabirinto().setStanzaCorrente(biblioteca);
        }
    Perchè mi dice:
    The method setStanzaCorrente(Stanza) is undefined for the type Object
    PartitaTest.java
    Stesso discorso per

    codice:
        public Stanza getStanzaVincente() {
            return stanzaVincente;
        }


    Grazie tante..

  5. #5
    non so che dirti quel metodo getNuovoLabrinto non esiste nel codice che avevi postato prima
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    Hai ragione Santino,
    sono andata un pò avanti..

    Stanza:
    http://pastebin.com/iTwpemq9

    Stanzatest
    http://pastebin.com/W4jR2WMZ

  7. #7
    Si Rosalba, hai mandato roba che non c'entra niente con l'errore che hai postato.
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Cosa restituisce getNuovoLabirinto()?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.