Bom dia Pessoal, estou precisando de ajuda. Sou novato em Java e como aqui estão os melhores nessa linguagem resolvi recorrer a vocês para aprender um pouquinho com quem sabe. Estou implementando testes unitários no meu projeto usando o JUnit, porém, ao tentar rodar o meu teste pelo JUnit recebo esta mensagem: java.lang.NullPointerException - at br.com.issx.tipologia.controller.auxiliary.document.SizesControllerTest.testSave(SizesControllerTest.java:21), nesta linha tenho a seguinte sintaxe: List lista = sizeDao.listAll();
Alguém daqui do fórum já passou por este problema que pudesse me dar uma ajuda?
Desde já agradeço a todos!
Se você fizer uma pesquisa no GUJ mesmo sobre NullPointerException eu nem sei quantos posts você vai encontrar, de tão comum que é esse erro.
Acontece que você está tentando utilizar uma variável que está nula.
Bem vindo ao GUJ
[quote=Rodrigo Sasaki]Se você fizer uma pesquisa no GUJ mesmo sobre NullPointerException eu nem sei quantos posts você vai encontrar, de tão comum que é esse erro.
Acontece que você está tentando utilizar uma variável que está nula.
Bem vindo ao GUJ :)[/quote]Exato.
Veja nessa linha: SizesControllerTest.java:21
Alguém ai está null. Falta você dar um novo valor ao atributo.
Ah, bem vindo ao guj! =D
Obrigado pelas boas vindas Rodrigo! Quanto a esta pesquisa do NullpoiterException eu até fiz, só que cada NullPointer é diferente do outro, digo em problemas. Quanto a variável nula, a única que vejo é o meu size.setId, vejam:
public class SizesControllerTest extends TestCase {
private SizeDao sizeDao;
@Test
public void testSave() {
Size size = new Size();
size.setName("Teste");
size.setId(null);
List<Size> lista = sizeDao.listAll();
assertNotNull(size.getName());
for(Size tmp : lista){
System.out.println(tmp.getName());
System.out.println(tmp.getId());
}
sizeDao.save(size);
}
}
Por favor, sempre que for postar código, o poste entre as tags [code][ /code], Leia o nosso How To para conhecer as regras do fórum e umas dicas sobre como postar.
Vou te dar uma colher de chá. É seu sizeDAO que está null.
Você mesmo disse qual linha dava o erro.
OPs, descula Rodrigo. Como disse sou novato, esse é o meu primeiro post. Depois vou dar uma olhada no link do how to.
E Hebert, obrigado pelas boas vindas também! Desculpe, só agora dei um refresh na page e vi o seu post.
Um amigo me sugeriu substituir: a linha “private SizeDao sizeDao;” por: “private SizeDao sizeDao = new SizeDao();”, assim que substitui o Eclipse já reclamou: “Cannot instantiate the type SizeDao”
Oh my God!
SizeDAO provavelmente é uma interface.
Estou vendo que você está tendo vários problemas porque está tentando partir pro avançado sem ter conhecimentos sólidos no básico.
Eu sugiro que você procure algum livro/apostila/tutorial sobre Java Básico e OO, pois vai ser de grande ajuda pra você.
Quando entender bem orientação a objetos você tira isso de letra.
Eu sei Rodrigo, estou estudando: baixei as apostilas da Caelum FJ11 - FJ21 - FJ16. Porém vou levar um tempinho pra ler isto tudo. rsrsrs…
De qualquer forma, vou continuar tentando aqui.
A ideia é que você não pode instanciar uma interface.
Você deve ter algum SizeDAOImpl aí, que implemente SizeDAO ou algo do tipo. Pode tentar dar um new nele.
É Rodrigo, estou descobrindo isso aos poucos, rsrsrs… Então, tenho sim o DaoImpl e vi que ele não tinha o método List, acabei de criá-lo fazendo uma simples consulta HQL já que é só pra listar os sizes, daí volto pro meu teste e o danado do NullPointerException não me abandona… hehehe.
mas você adicionou aquela linha? sizeDAO = new SizeDAOImpl();
Você diz no meu SizeDaoImpl ou no meu ControllerTest?
O meu DaoImpl está assim:
@Component
public class SizeDaoImpl extends GenericDaoImpl<Size, Long> implements SizeDao {
public SizeDaoImpl(Session session) {
super(session);
}
@Override
public void save(Size size) {
// TODO Auto-generated method stub
}
public List<Size> listAll() {
String hql = "from size";
Query query = session.createQuery(hql);
return query.list();
}
}
Usando as dicas do How To!
No teste mesmo, aonde acontece o problema.
Bom, essa é a minha classe teste, nela eu tenho na linha 3 o “private SizeDao sizeDao”, eu substituo, ou adiciono o que você recomendou abaixo dessa linha?!
Isso que eu não consegui entender direito?!
public class SizesControllerTest extends TestCase {
private SizeDao sizeDao;
/**
* @uml.property name="dao"
* @uml.associationEnd multiplicity="(1 1)"
*/
@Test
public void testSave() {
Size size = new Size();
size.setName("Teste");
size.setId(null);
List<Size> lista = sizeDao.listAll();
assertNotNull(size.getName());
for(Size tmp : lista){
System.out.println(tmp.getName());
System.out.println(tmp.getId());
}
sizeDao.save(size);
}
}
antes de você chamar sizeDao.listAll() você precisa inicializar o objeto.
Pode ser logo na linha anterior se preferir.
Voltei, depois de um pouco de batalha eu consegui resolver o problema de NullPointerException. fiz mais ou menos o que você me recomendou Rodrigo:
private SizeDao sizeDao = new SizeDaoImpl();
O erro que aparece agora é outro: junit.framework.AssertionFailedError: Exception in constructor: testSave (java.lang.Error: Unresolved compilation problem: Cannot instantiate the type SizeDaoImpl - at br.com.issx.tipologia.controller.auxiliary.document.SizesControllerTest.(SizesControllerTest.java:16)
Já tentei algumas coisas mas não consegui resolver.
Aí Hebert, gostaria de parabenizá-lo pelo seu Blog, já vi que vou dedicar algumas horinhas a ele. Tem muito material bom lá.
Obrigado e mais uma vez, parabéns!