¿Por qué me sale NullPointerException cuando deposito dinero en mi clase CuentaSaldo?

Estoy haciendo una clase llamada CuentaSaldo y tengo que depositar 4000.0 y luego llamar al método getSaldo(), para verificar que yo deposite esa cantidad. Estoy usando JUnit, me sale todo en color rojo y el NullPointedException me pone que ocurre en las operaciones que realizo en el método depositar() y en la parte del test donde llamo a ese método para ingresar la cantidad que quiero depositar en mi cuenta. Ahora les paso el código :

public class CuentaSueldo {
    protected Integer numero;
    protected String nombre;
    protected String apellido;
    protected Double saldo;
    public CuentaSueldo() {
    }
    public CuentaSueldo(Integer numero, String nombre, String apellido, Double saldo) {
        this.numero = numero;
        this.nombre = nombre;
        this.apellido = apellido;
        this.saldo = saldo;
    }
    public CuentaSueldo(Double saldo) {
        this.saldo = saldo;
    }
    public CuentaSueldo(Integer numero, String apellido, String nombre) {
        this.numero = numero;
        this.apellido = apellido;
        this.nombre = nombre;
        this.saldo = 0.0;
    }
    public Integer getNumero() {
        return numero;
    }
    public void setNumero(Integer numero) {
        this.numero = numero;
    }
    public String getNombre() {
        return nombre;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public String getApellido() {
        return apellido;
    }
    public void setApellido(String apellido) {
        this.apellido = apellido;
    }
    public Double getSaldo (){
        return this.saldo;
    }
    public void setSaldo(Double saldo) {
        this.saldo = saldo;
    }
    public void depositar (double cantidad){
        if(cantidad>0.0D){
        this.saldo = this.saldo + cantidad; //Aca sale nullexception
      }
     }
    public void extraer (double cantidad){
        if(cantidad <= this.saldo){
            this.saldo = this.saldo - cantidad;
        }
    }
}
    import static org.junit.Assert.*;
import org.junit.Test;
public class TestCuentaBancaria {
    @Test
    public void test() {
        CuentaSueldo cuenta = new CuentaSueldo();
        cuenta.depositar(4000.0D);//Aca sale nullexception
        Double sueldoEsperado=4000.0D;
        Double sueldoActual= cuenta.getSaldo();
        assertEquals(sueldoEsperado, sueldoActual);
    }
}

1 Respuesta

Respuesta

Tienes un constructor CuentaSueldo(){} vacío que no incializa nada y es el que utilizas en tu test mientras que el método depositar intenta in

public void depositar(double cantidad) {
    if (cantidad > 0.0D) {
        this.saldo += cantidad;
    }
}

crementar el saldo (que, como no has definido en el constructor que se incialice, vale Null).

La solución pasaría por utilizar un constructor que inicialice el saldo o reescribir tu constructor vacío para que establezca el saldo en 0€ por ejemplo:

public CuentaSaldo() {
    this.saldo = 0.0D;
}

Porque si no, en depositar estás intentando hacer esta operación: "Saldo = Null + Cantidad" y como comprenderás no puedes sumar Null y un número.

El mismo problema lo tendrías si utilizas el método extraer.

Una última puntualización, y solamente por estética, podrías utilizar el operador += y el -= para las operaciones de depositar y extraer.

P.Ej.:

public void depositar (double cantidad) {
    if(cantidad > 0.0D){
        this.saldo += cantidad; // Este operador sería lo mismo que this.saldo = this.saldo + cantidad;
    }
}

Por alguna razón me ha insertado un trozo de código repetido al principio de la respuesta y no se muy bien como puedo editar mi respuesta, así que ignora ese trozo de código que está mejor escrito al final.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas