TestCase Puntatore Nullo

di il
5 risposte

TestCase Puntatore Nullo

Salve a tutti, apro questo topic per segnalare un errore riscontrato durante la scrittura del test case del metodo autore2libri della classe biblioteca di questo codice; L'errore riscontrato, riguarda la segnalazione da parte della console junit, di un puntatore nullo; cosa molto strana avendo istanziato tutto nel modo appropriato.
Posto qui sotto il codice completo del compito insieme al testo dell'esercizio a riguardo;
Ringrazio in anticipo per un eventuale aiuto da parte della community.. Grazie!

Testo Esercizio:
Scrivere un insieme di test di unità per testare il metodo Map<Autore, Set<Libro>>
autore2libri() della classe Biblioteca.


Classe Libro:
package it.uniroma3.EsameGiugno2010;

import java.util.*;
/*gestione duplicati risolta grazie alla 
 * presenza di HashCode() e Equals()*/
 

public class Libro {
	private Set<Autore> autori;
	private String titolo;

	public Libro(String titolo) {
		this.titolo = titolo;
		this.autori = new HashSet<Autore>();
	}

	public void AddAutore(Autore autore){
		this.autori.add(autore);
	}

	public Set<Autore> getAutori() {
		return Collections.unmodifiableSet(this.autori);
	}
	public String getTitolo() {
		return this.titolo;
	}

	@Override
	public int hashCode() {
		return this.titolo.hashCode();
	}

	@Override
	public boolean equals(Object obj) {
		Libro libro = (Libro)obj;
        return  libro.getTitolo().equals(this.getTitolo());
	}
}
Classe Biblioteca:
package it.uniroma3.EsameGiugno2010;

import java.util.*;

public class Biblioteca {
	private Map<String, Libro> codice2libro;

	public Biblioteca() {
		this.codice2libro = new HashMap<String, Libro>();
	}

	public void addLibro(String codice, Libro libro){
		this.codice2libro.put(codice, libro);
	}

	List<Autore> seleziona(Selezionatore selezionatore) {
		return selezionatore.eseguiSelezione(new ArrayList<Libro>(this.codice2libro.values()));

	}

	public Map<Autore, Set<Libro>> autore2Libri(){
		Map<Autore, Set<Libro>> autore2libri = new HashMap<Autore, Set<Libro>>();
		Set<Autore> autori;
		Set<Libro> libri;
		for (Libro a : this.codice2libro.values()) {
			autori = a.getAutori();
			for (Autore b : autori) {
				if  (autore2libri.containsKey(b)) 
					libri = autore2libri.get(b);
				else 
					libri = new HashSet<Libro>();
				libri.add(a);
				autore2libri.put(b, libri);

			}
		}
		return autore2libri;
	}

	//Altri metodi omessi
}
Classe Autore:
package it.uniroma3.EsameGiugno2010;

public class Autore {
	private int annoNascita;
	private String nome;
	
	public Autore(String nome, int annoNascita){
		this.nome = nome;
		this.annoNascita = annoNascita;
	}
	
	public int getAnnoNascita() {
		return annoNascita;
	}
	
	public String getNome() {
		return nome;
	}
}
BibliotecaTest:
package it.uniroma3.EsameGiugno2010;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

public class BibliotecaTest {
	Biblioteca bib;
	Libro l1,l2,l3;
	Autore a1,a2,a3;
	String s1,s2,s3;

	@Before
	public void setUp() throws Exception {
		this.bib = new Biblioteca();
		this.l1 = new Libro(s1);
		this.l2 = new Libro(s2);
		this.l3 = new Libro(s3);
		this.a1 = new Autore("Gianni Storti", 1967);
		this.a2 = new Autore("Giangiacomo Dellasavana", 1974);
		this.a3 = new Autore("Giulio Malanno", 1938);
		this.s1 = "codice 1";
		this.s2 = "codice 2";
		this.s3 = "codice 3";
	}

	@Test
	public void autore2libriNOTnull () {
		this.l1.AddAutore(a1);
		this.l1.AddAutore(a2);
		this.l2.AddAutore(a2);
		this.l2.AddAutore(a3);
		this.l3.AddAutore(a3);
		bib.addLibro(s1, l1);
		bib.addLibro(s2, l2);
		bib.addLibro(s3, l3);
		assertEquals(5, bib.autore2Libri().keySet().size());
		
		
	}
}
Grazie Ancora.

5 Risposte

  • Re: TestCase Puntatore Nullo

    La primissima cosa su cui mi è caduto l'occhio: in setUp() quando istanzi i Libro le stringhe s1,s2,s3 sono null.
    Non ho tempo ora di indagare oltre.
  • Re: TestCase Puntatore Nullo

    La primissima cosa su cui mi è caduto l'occhio: in setUp() quando istanzi i Libro le stringhe s1,s2,s3 sono null.
    	@Before
    	public void setUp() throws Exception {
    		this.bib = new Biblioteca();
    		this.l1 = new Libro(s1);
    		this.l2 = new Libro(s2);
    		this.l3 = new Libro(s3);
    		this.a1 = new Autore("Gianni Storti", 1967);
    		this.a2 = new Autore("Giangiacomo Dellasavana", 1974);
    		this.a3 = new Autore("Giulio Malanno", 1938);
    		this.s1 = new String("codice 1");
    		this.s2 = new String("codice 2");
    		this.s3 = new String("codice 3");
    	}
    anche così, purtroppo, cambia poco; ma ti ringrazio comunque per la correzione;
  • Re: TestCase Puntatore Nullo

    lukyluke93 ha scritto:


    		this.s1 = new String("codice 1");
    		this.s2 = new String("codice 2");
    		this.s3 = new String("codice 3");
    Così non hai corretto nulla. Hai solo invocato un costruttore di String, che tra l'altro è ridondante (nonché inutile). Ti ripeto che la cosa più evidente è che in setUp() i Libro li crei con s1/s2/s3 null.
    Non ho tempo di indagare di più ... forse stasera.
  • Re: TestCase Puntatore Nullo

    Sei un mostrooo! Corretto e funzionante.. ora mi torna!
    package it.uniroma3.EsameGiugno2010;
    
    import static org.junit.Assert.*;
    
    import org.junit.Before;
    import org.junit.Test;
    
    public class BibliotecaTest {
    	Biblioteca bib;
    	Libro l1,l2,l3;
    	Autore a1,a2,a3;
    	String s1,s2,s3;
    
    	@Before
    	public void setUp() throws Exception {
    		this.bib = new Biblioteca();
    		this.s1 = new String("codice 1");
    		this.s2 = new String("codice 2");
    		this.s3 = new String("codice 3");
    		this.l1 = new Libro(this.s1);
    		this.l2 = new Libro(this.s2);
    		this.l3 = new Libro(this.s3);
    		this.a1 = new Autore("Gianni Storti", 1967);
    		this.a2 = new Autore("Giangiacomo Dellasavana", 1974);
    		this.a3 = new Autore("Giulio Malanno", 1938);
    	}
    
    	@Test
    	public void autore2libriNOTnull () {
    		this.l1.AddAutore(a1);
    		this.l1.AddAutore(a2);
    		this.l2.AddAutore(a2);
    		this.l2.AddAutore(a3);
    		this.l3.AddAutore(a3);
    		bib.addLibro(s1, l1);
    		bib.addLibro(s2, l2);
    		bib.addLibro(s3, l3);
    		assertEquals(3, bib.autore2Libri().keySet().size());
    		
    		
    	}
    }
    Grazie mille andbin.
  • Re: TestCase Puntatore Nullo

Devi accedere o registrarti per scrivere nel forum
5 risposte