Ir para conteúdo
Fórum Script Brasil
  • 0

JUnit - Erro na Variavel Integer java.lang.NullPointerException


danilomobr

Pergunta

Pessoal, eu estou fazendo teste unitário usando o JUnit, porém ao realizar o teste de uma classe, alguns metodos me retornaram erro:

java.lang.NullPointerException

 

Pelo que eu entendi ele está dizendo que ao passar um valor "nulo" por parametro em um metodo irá dar erro, ou seja, não é permitido valor nulo.

Eu então fiz uma validação para verificar antes se o valor é diferente de nulo e assim poder executar a procura do dado.

Porém mesmo fazendo isso o erro persiste.

Segue abaixo o código:

 

public String getVeiculo(Integer id) {
        String nomeVeiculo = "";
        
        if (id != null) {
            Veiculo veiculo = this.veiculoFacade.find(id);
            nomeVeiculo = veiculo.getNome();
        }
        
        return nomeVeiculo;
    }
public Veiculo(Integer id, String nome) {
        this.id = id;
        this.nome = nome;
    }

public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

Metodo de teste Junit

 

public void testGetVeiculo() {
        System.out.println("Rodando Teste getVeiculo");
        
        Double custo = 1.0;
        
        Integer actual = 1;
        List<Veiculo> expected = Arrays.asList(
                new Veiculo(1, "Caminhão baú", BigDecimal.valueOf(custo))
        );
        
        //Test equals
        assertEquals(expected, v.getVeiculo(actual));        
        assertThat(expected, is(v.getVeiculo(actual)));
        
        //Test check empty list
        assertThat(actual, is(not(empty())));
    }

 

Agradeço quem puder me ajudar.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Ao executar o teste no JUnit ele ta retornando isso:

Testcase: testGetVeiculo(controller.VeiculoControllerTest):	Caused an ERROR
null
java.lang.NullPointerException
	at controller.VeiculoController.getVeiculo(VeiculoController.java:54)
	at controller.VeiculoControllerTest.testGetVeiculo(VeiculoControllerTest.java:108)


Test controller.VeiculoControllerTest FAILED

Pelo que eu entendi, o erro esta nessa linha:

Veiculo veiculo = this.veiculoFacade.find(id);

Porém, se eu executo o projeto, não da nenhum erro, retornando assim o nome do veiculo pelo id (inteiro) enviado.

Só está dando erro mesmo é na hora de testar.
Eu ainda não consegui descobrir porque ele insiste em retornar "null", se eu passei o valor da variavel no arquivo de teste.
Além disso, eu coloquei mais a validação no metodo testado.

 

Link para o comentário
Compartilhar em outros sites

  • 0

Eu coloquei um "try catch" no metodo getVeiculo() da classe VeiculoController, segue abaixo como ficou:

public String getVeiculo(Integer id) {
        String nomeVeiculo = "";
        
        try {
            Veiculo veiculo = this.veiculoFacade.find(id);
            nomeVeiculo = veiculo.getNome();
        } catch (Exception e) {
            System.out.println(e);
        }
        
        return nomeVeiculo;
    }

Por ao executar o teste no JUnit o erro continua persistindo:

Testcase: testGetVeiculo(controller.VeiculoControllerTest):	FAILED
expected:<[entities.Veiculo[ id=1, nome='Caminhão baú', custo=1.0 ]]> but was:<>
junit.framework.AssertionFailedError: expected:<[entities.Veiculo[ id=1, nome='Caminhão baú', custo=1.0 ]]> but was:<>
	at controller.VeiculoControllerTest.testGetVeiculo(VeiculoControllerTest.java:108)

Isso está muito estranho, porque o método que ele entra é do próprio faces facade, ou seja, não era para retornar erro.

 

Por favor, alguém já passou por isso ou sabe ao menos como evitar esse erro ao testar?

 

 

Editado por danilomobr
Link para o comentário
Compartilhar em outros sites

  • 0

Olá, @danilomobr Ajudaria muito se você passasse o código todo, por exemplo, os atributos da classe (que presumo ser algo como Veiculo) e como você está instanciando os objetos das classes, etc...

Do modo como você postou seu código fika difícil dar uma resposta adequada

Por enquanto vou apenas passar esse link com respeito a uma exception do tipo NullPointerException

NullPointerException - Principais causas 

Editado por Visitante
correção no comentário
Link para o comentário
Compartilhar em outros sites

  • 0

@danilomobr Não consegui rodar o projeto ainda, mas a questão é a seguinte: Em métodos getters não se usa parâmetros. Esses métodos são usados apenas para retornar o valor de um atributo da classe que está definido como privado ou protegido (private ou protected), que é um assunto relacionado ao encapsulamento.

Pelo que estou vendo aí no seu código há um erro no conceito de orientação a objetos.

Estudei sobre orientação a objetos tanto em Java como em C++,  e devo confessar q não é comum e, sendo sincero, não encontrei e nem fiz algo como métodos getters com parâmetros

Pelo nome do método (getVeiculo) ele não deveria receber parâmetros e deveria retornar um objeto da classe Veiculo e não apenas um atributo dessa classe, que no caso é o nome do veiculo. Consegue entender esse ponto?  

Seria interessante dar uma revisada com respeito a essa questão

Não sei se consegui passar de maneira clara o modo como vejo isso, que foi como aprendi, mas creio que deu para entender o ponto onde quis chegar

Foi a primeiro ponto que me chamou a atenção ao ver seu código 

Veja como eu faria a assinatura desse seu método:

public Veiculo getVeiculo()

Veja um simples exemplo que pequei aqui para mostra isso:

public Jogada obterJogada() throws JogadaInvalidaException {
    String str = Console.readString(); // Lê do teclado a jogada do usuário
    return new Jogada(str); // retorna a jogada feita ou lança uma exceção se a jodada for inválida, exceção essa que será tratada
}

Considere isso q falei e qualquer coisa é só perguntar

Obs: Pode não ser isso o motivo dessa exceção do tipo NullPointerException, mas é algo que deve ser ajustado em seu código

Editado por Visitante
Corrigir código
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...