Aprendiendo .NET sobre la marcha: Viejos Windows Forms (ii)


<<Aprendiendo .NET sobre la marcha: Viejos Windows Forms (i)
Aprendiendo .NET sobre la marcha: Viejos Windows Forms (iii)>>

Para realizar las pruebas unitarias de nuestro proyecto vamos a proceder como en el proyecto anterior, solo que esta vez creamos las pruebas unitarias sobre cada clase creada: Triangulo, Cuadrilatero, PoligonoRegular, Prisma y Piramide.

Esto generará las pruebas unitarias para cada método de cada clase, lo que nos ahorra tiempo. Además indicaremos que serán pruebas vacías (sin código).

Cada que creamos las pruebas para una clase en particular se generará un archivo nuevo, pero en el navegador de pruebas veremos todo el conjunto.

A continuación pongo el código que deberá ir en cada conjunto de pruebas

[TestClass()]
    public class TrianguloTests {
        [TestMethod()]
        public void PerimetroTest() {
            var Triangulo1 = new Triangulo() {
                LadoA = 3,
                LadoB = 4,
                LadoC = 5
            };
            float r;
            r = Triangulo1.Perimetro();
            Assert.IsTrue(r.Equals(12F), "[1] Error de cálculo en perímetro de triángulo: " + r.ToString());
            Triangulo1.LadoA = Triangulo1.LadoC;
            Triangulo1.LadoB = Triangulo1.LadoC;
            r = Triangulo1.Perimetro();
            Assert.IsTrue(r.Equals(15F), "[2] Error de cálculo en perímetro de triángulo: " + r.ToString());
        }

        [TestMethod()]
        public void SuperficieTest() {
            var Triangulo1 = new Triangulo() {
                LadoA = 3,
                LadoB = 4,
                LadoC = 5
            };
            float r = Triangulo1.Superficie();
            Assert.IsTrue(r.Equals(6F), "[1] Error de cálculo en superficie de triángulo:" + r.ToString());
            Triangulo1.LadoA = Triangulo1.LadoC;
            Triangulo1.LadoB = Triangulo1.LadoC;
            r = Triangulo1.Superficie();
            Assert.IsTrue(r.Equals(12.5F), "[2] Error de cálculo en superficie de triángulo:" + r.ToString());
        }
    }

Algunos puntos: primero, observemos que asigno a una variable de tipo float el resultado del método, segundo, el resultado no lo estoy igualando mediante el operador ==, sino usando el método Equals ya que es un método que podemos sobre-escribir para hacer la comparación entre nuestras clases de la forma que mejor consideremos (por el momento no necesitamos ese cambio), tercero, el número entre los paréntesis del método Equals tiene el sufijo F para indicar que es un número de tipo flotante, ya que Equals es un poco estricto en cuando a tipos de datos.

[TestClass()]
    public class CuadrilateroTests {
        [TestMethod()]
        public void PerimetroTest() {
            var Cuadrilatero1 = new Cuadrilatero() {
                LadoA = 3,
                LadoB = 4,
                LadoC = 5,
                LadoD = 6
            };
            float r = Cuadrilatero1.Perimetro();
            Assert.IsTrue(r.Equals(18F), "[1] Error de cálculo en perímetro de cuadrilátero: " + r.ToString());
            Cuadrilatero1.LadoA = Cuadrilatero1.LadoD;
            Cuadrilatero1.LadoB = Cuadrilatero1.LadoD;
            Cuadrilatero1.LadoC = Cuadrilatero1.LadoD;
            r = Cuadrilatero1.Perimetro();
            Assert.IsTrue(r.Equals(24F), "[2] Error de cálculo en perímetro de cuadrilátero: " + r.ToString());
        }

        [TestMethod()]
        public void SuperficieTest() {
            var Cuadrilatero1 = new Cuadrilatero() {
                LadoA = 3,
                LadoB = 4,
                LadoC = 5,
                LadoD = 6
            };
            float r = Cuadrilatero1.Superficie();
            Assert.IsTrue(r.Equals(17.5F), "[1] Error de cálculo en superficie de cuadrilátero: " + r.ToString());
            Cuadrilatero1.LadoA = Cuadrilatero1.LadoD;
            Cuadrilatero1.LadoB = Cuadrilatero1.LadoD;
            Cuadrilatero1.LadoC = Cuadrilatero1.LadoD;
            r = Cuadrilatero1.Superficie();
            Assert.IsTrue(r.Equals(36F), "[2] Error de cálculo en superficie de cuadrilátero: " + r.ToString());
        }
    }
[TestClass()]
    public class PoligonoRegularTests {
        [TestMethod()]
        public void PerimetroTest() {
            var Poligono1 = new PoligonoRegular() {
                NumLados = 5,
                LadoA = 5,
                LadoB = 5
            };
            Assert.IsTrue(Poligono1.Perimetro().Equals(25F), "[1] Error de cálculo en perímetro de polígono regular.");
        }

        [TestMethod()]
        public void SuperficieTest() {
            var Poligono1 = new PoligonoRegular() {
                NumLados = 5,
                LadoA = 5,
                LadoB = 5
            };
            Assert.IsTrue(Poligono1.Superficie().Equals(62.5F), "[1] Error de cálculo en superficie de polígono regular.");
        }
    }
[TestClass()]
    public class PrismaTests {

        [TestMethod()]
        public void AreaLateralTest() {
            var Prisma1 = new Prisma() {
                Altura = 10,
                Base = new PoligonoRegular() {
                    LadoA = 5,
                    LadoB = 5,
                    LadoC = 5,
                    NumLados = 5
                }
            };
            Assert.IsTrue(Prisma1.AreaLateral().Equals(250F),"[1] Error de cálculo en area lateral de prisma.");
        }

        [TestMethod()]
        public void AreaTotalTest() {
            var Prisma1 = new Prisma() {
                Altura = 10,
                Base = new PoligonoRegular() {
                    LadoA = 5,
                    LadoB = 5,
                    LadoC = 5,
                    NumLados = 5
                }
            };
            Assert.IsTrue(Prisma1.AreaTotal().Equals(375F), "[1] Error de cálculo en area total de prisma.");
        }

        [TestMethod()]
        public void VolumenTest() {
            var Prisma1 = new Prisma() {
                Altura = 10,
                Base = new PoligonoRegular() {
                    LadoA = 5,
                    LadoB = 5,
                    LadoC = 5,
                    NumLados = 5
                }
            };
            Assert.IsTrue(Prisma1.Volumen().Equals(625F), "[1] Error de cálculo en volumen de prisma.");
        }
    }

De esta forma estamos verificando el correcto funcionamiento de nuestros métodos sin tener que ejecutar la aplicación directamente. Así como en algunas clases puse dos Assert, podemos poner más pruebas aún, lo cual es muy útil si el método puede generar diferentes resultados según los parámetros, e incluso seguir distintos flujos de datos.

En la siguiente publicación daremos inicio a la programación de nuestra interfaz de usuario y consumiremos los métodos de nuestras clases tal como lo hicimos con nuestras pruebas.

Agradezco los comentarios que puedan hacerme, así como el que se suscriban para recibir noticias y, si consideran útil, compartir mi blog.

Comentarios

Entradas populares