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.