Skip to content

Latest commit

 

History

History
115 lines (89 loc) · 2.55 KB

13_Refactorizacion.md

File metadata and controls

115 lines (89 loc) · 2.55 KB

Seguimos.

Haremos los 3 tests que quedan rápidamente. No aportan nada didáctico nuevo.

  • Si ingreso 100.457 en una cuenta vacía, el saldo es de 0
  • Si ingreso 6000.00 en una cuenta vacía, el saldo es de 6000.00
  • Si ingreso 6000.01 en una cuenta vacía, el saldo es de 0

Tests

    @Test
    public void testIngresoCantidadMasDe2DecimalesNoEsValido(){
        Cuenta c = new Cuenta();
        c.ingreso(100.457);
        assertEquals(0, c.getSaldo());
    }
    
	@Test
    public void testIngresoMaximoEsDe6000(){
        Cuenta c = new Cuenta();
        c.ingreso(6000);
        assertEquals(6000, c.getSaldo());
    }
    
	@Test
    public void testIngresoMasDe6000NoEsValido(){
        Cuenta c = new Cuenta();
        c.ingreso(6000.01);
        assertEquals(0, c.getSaldo());
    }

Código final

public class Cuenta {
	private double saldo;

	public Cuenta() {
		this.saldo = 0.0;
	}
    
    public double getSaldo() {
        return this.saldo;
    }
    
    public void ingreso(double cantidad){
        double roundOff = Math.round(cantidad * 100.0) / 100.0;
        if(roundOff != cantidad) {
            this.saldo = 0;
        }
        
        if(cantidad < 0) {
            this.saldo = 0;
        }
        
        if(cantidad > 6000.00){
            this.saldo = 0;
        } 
        if(esValida){ 
            this.saldo += cantidad;
        }
    }
}

Paso 2, los tests pasan.

Paso 3. Refactorizar. La función ingreso() empieza a tener más líneas de control que de lo que realmente hace. Me pide refactorizarla. Voy a crear un método privado de validación

public class Cuenta {
	private double saldo;

	public Cuenta() {
		this.saldo = 0.0;
	}
    
    public double getSaldo() {
        return this.saldo;
    }
    
    public void ingreso(double cantidad){
        boolean esValida = this.validarCantidadIngresada(cantidad);
        if(!esValida){ 
        	   this.saldo = 0;
        } else {
        	   this.saldo += cantidad;
        }
    }
    
    private boolean validarCantidadIngresada(double cantidad){
    	    double roundOff = Math.round(cantidad * 100.0) / 100.0;
        if(roundOff != cantidad) {
            return false;
        }
        
        if(cantidad < 0) {
            return false;
        }
        
        if(cantidad > 6000.00){
            return false;
        } 
        
        return true;
    }

Vuelvo a ejecutar los tests. ¡¡¡Y pasan!!! Mi código hace exactamente lo mismo que antes. TDD da una seguridad muy grande a la hora de afrontar cambios o refactorizaciones.