Laboratorio de Pruebas Unitarias

Objetivo

El objetivo de este laboratorio es que el estudiante pueda aplicar los conceptos de pruebas unitarias en la creación de una clase que permita realizar operaciones aritméticas básicas.

Desarrollo

Java

  1. Crear un proyecto de Java en Intelligent Idea llamado Presupuesto y una clase llamada Presupuesto con los siguientes métodos:
public class Presupuesto {
    public double calcularTotal(double subtotal, double impuesto) {
        return subtotal + impuesto;
    }

    public double calcularImpuesto(double subtotal, double tasaImpuesto) {
        return subtotal * tasaImpuesto;
    }
}
  1. Crear una clase llamada PresupuestoTest con los siguientes métodos:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class PresupuestoTest {
    @Test
    public void testCalcularTotal() {
        Presupuesto presupuesto = new Presupuesto();
        assertEquals(110.0, presupuesto.calcularTotal(100.0, 10.0));
    }

    @Test
    public void testCalcularImpuesto() {
        Presupuesto presupuesto = new Presupuesto();
        assertEquals(10.0, presupuesto.calcularImpuesto(100.0, 0.10));
    }
}
  1. Ejecutar las pruebas unitarias y verificar que todas las pruebas pasen.

  2. Implementar el método calcularDescuento en la clase Presupuesto y agregar una prueba unitaria en la clase PresupuestoTest para verificar su correcto funcionamiento.

  3. Implementar el método calcularSubtotal en la clase Presupuesto y agregar una prueba unitaria en la clase PresupuestoTest para verificar su correcto funcionamiento.

  4. Implementar el método calcularTotalConDescuento en la clase Presupuesto y agregar una prueba unitaria en la clase PresupuestoTest para verificar su correcto funcionamiento.

  5. Implementar el método calcularTotalConImpuestoYDescuento en la clase Presupuesto y agregar una prueba unitaria en la clase PresupuestoTest para verificar su correcto funcionamiento.

  6. Ejecutar las pruebas unitarias y verificar que todas las pruebas pasen.

Python

  1. Crear un proyecto de Python llamado Impuesto que calcule el incremento del iva de 12% a 14% y un módulo llamado calcular_impuesto con las siguientes funciones:
def calcular_impuesto(subtotal, tasa_impuesto):
    return subtotal * tasa_impuesto
  1. Crear un módulo llamado test_impuesto con las siguientes pruebas unitarias:
import unittest
from impuesto import calcular_impuesto

class ImpuestoTest(unittest.TestCase):
        
        def test_calcular_impuesto(self):
            self.assertEqual(calcular_impuesto(100, 0.15), 15)
            self.assertEqual(calcular_impuesto(100, 0.10), 10)
            self.assertEqual(calcular_impuesto(100, 0.05), 5)
            self.assertNotEqual(calcular_impuesto(100, 0.15), 10)
            self.assertNotEqual(calcular_impuesto(100, 0.10), 5)
            self.assertNotEqual(calcular_impuesto(100, 0.05), 15)
  1. Ejecutar las pruebas unitarias y verificar que todas las pruebas pasen.
python -m unittest test_impuesto.py
  1. Implementar el método calcular_descuento en el módulo calcular_impuesto y agregar una prueba unitaria en el módulo test_impuesto para verificar su correcto funcionamiento.

  2. Implementar el método calcular_subtotal en el módulo calcular_impuesto y agregar una prueba unitaria en el módulo test_impuesto para verificar su correcto funcionamiento.

  3. Implementar el método calcular_total_con_descuento en el módulo calcular_impuesto y agregar una prueba unitaria en el módulo test_impuesto para verificar su correcto funcionamiento.

  4. Implementar el método calcular_total_con_impuesto_y_descuento en el módulo calcular_impuesto y agregar una prueba unitaria en el módulo test_impuesto para verificar su correcto funcionamiento.

  5. Ejecutar las pruebas unitarias y verificar que todas las pruebas pasen.

JavaScript

En esta sección vamos a crear un proyecto llamado inventario que permita:

  • Ingresar productos
  • Listar productos
  • Buscar productos
  • Actualizar productos
  1. Crear un proyecto de Node.js llamado Inventario y un archivo llamado inventario.js con las siguientes funciones:
class Inventario {
    constructor() {
        this.productos = [];
    }

    agregarProducto(producto) {
        this.productos.push(producto);
    }

    listarProductos() {
        return this.productos;
    }

    buscarProducto(codigo) {
        return this.productos.find(producto => producto.codigo === codigo);
    }

    actualizarProducto(codigo, producto) {
        const index = this.productos.findIndex(producto => producto.codigo === codigo);
        this.productos[index] = producto;
    }
}

module.exports = Inventario;
  1. Crear un archivo llamado inventario.test.js con las siguientes pruebas unitarias:
const Inventario = require('./inventario');

test('agregar producto', () => {
    const inventario = new Inventario();
    inventario.agregarProducto({ codigo: 1, nombre: 'Producto 1', precio: 100 });
    expect(inventario.listarProductos()).toEqual([{ codigo: 1, nombre: 'Producto 1', precio: 100 }]);
});

test('buscar producto', () => {
    const inventario = new Inventario();
    inventario.agregarProducto({ codigo: 1, nombre: 'Producto 1', precio: 100 });
    expect(inventario.buscarProducto(1)).toEqual({ codigo: 1, nombre: 'Producto 1', precio: 100 });
});

test('actualizar producto', () => {
    const inventario = new Inventario();
    inventario.agregarProducto({ codigo: 1, nombre: 'Producto 1', precio: 100 });
    inventario.actualizarProducto(1, { codigo: 1, nombre: 'Producto 2', precio: 200 });
    expect(inventario.buscarProducto(1)).toEqual({ codigo: 1, nombre: 'Producto 2', precio: 200 });
});

test('listar productos', () => {
    const inventario = new Inventario();
    inventario.agregarProducto({ codigo: 1, nombre: 'Producto 1', precio: 100 });
    inventario.agregarProducto({ codigo: 2, nombre: 'Producto 2', precio: 200 });
    expect(inventario.listarProductos()).toEqual([{ codigo: 1, nombre: 'Producto 1', precio: 100 }, { codigo: 2, nombre: 'Producto 2', precio: 200 }]);
});

test('buscar producto no existente', () => {
    const inventario = new Inventario();
    inventario.agregarProducto({ codigo: 1, nombre: 'Producto 1', precio: 100 });
    expect(inventario.buscarProducto(2)).toBeUndefined();
});
  1. Ejecutar las pruebas unitarias y verificar que todas las pruebas pasen.
npm test
  1. Implementar el método eliminarProducto en la clase Inventario y agregar una prueba unitaria en la clase InventarioTest para verificar su correcto funcionamiento.

  2. Implementar el método categoriaProducto en la clase Inventario y agregar una prueba unitaria en la clase InventarioTest para verificar su correcto funcionamiento.

  3. Implementar el método actualizarPrecioProducto en la clase Inventario y agregar una prueba unitaria en la clase InventarioTest para verificar su correcto funcionamiento.

  4. Implementar el método actualizarNombreProducto en la clase Inventario y agregar una prueba unitaria en la clase InventarioTest para verificar su correcto funcionamiento.

  5. Ejecutar las pruebas unitarias y verificar que todas las pruebas pasen.