Introducción

Las pruebas unitarias son una parte esencial del desarrollo de software, ya que permiten verificar que las unidades individuales de código (como funciones y métodos) funcionan correctamente. NUnit es una de las bibliotecas más populares para realizar pruebas unitarias en .NET, y es totalmente compatible con F#. En esta sección, aprenderás cómo configurar y utilizar NUnit para escribir y ejecutar pruebas unitarias en F#.

Configuración del Entorno

Antes de comenzar a escribir pruebas unitarias, necesitas configurar tu entorno de desarrollo para utilizar NUnit.

Instalación de NUnit

  1. Instala NUnit y NUnit3TestAdapter:

    • Abre tu proyecto en Visual Studio o tu editor de código preferido.

    • Abre la consola del administrador de paquetes (Package Manager Console) y ejecuta los siguientes comandos:

      Install-Package NUnit
      Install-Package NUnit3TestAdapter
      
  2. Configura tu proyecto de pruebas:

    • Crea un nuevo proyecto de pruebas en tu solución. En Visual Studio, selecciona Archivo > Nuevo > Proyecto y elige Proyecto de Pruebas Unitarias (.NET Core).
    • Asegúrate de que tu proyecto de pruebas tenga referencias a NUnit y NUnit3TestAdapter.

Escribiendo Pruebas Unitarias

Estructura Básica de una Prueba Unitaria

Una prueba unitaria en NUnit generalmente sigue esta estructura:

  1. Atributos de Prueba: Indican que un método es una prueba.
  2. Método de Prueba: Contiene el código que se va a probar y las aserciones para verificar los resultados.

Ejemplo de Prueba Unitaria

Vamos a escribir una prueba unitaria simple para una función que suma dos números.

Código a Probar

Primero, crea una función en tu proyecto principal que necesite ser probada:

module MathFunctions =
    let add x y = x + y

Prueba Unitaria

Ahora, crea una prueba unitaria para esta función en tu proyecto de pruebas:

open NUnit.Framework
open MathFunctions

[<TestFixture>]
type MathFunctionsTests() =

    [<Test>]
    member this.``Add should return the sum of two numbers``() =
        let result = add 2 3
        Assert.AreEqual(5, result)

Explicación del Código

  • [<TestFixture>]: Indica que la clase contiene pruebas unitarias.
  • [<Test>]: Marca el método como una prueba unitaria.
  • Assert.AreEqual(expected, actual): Verifica que el resultado de la función add sea igual a 5.

Ejecutando Pruebas Unitarias

Usando Visual Studio

  1. Explorador de Pruebas:

    • Abre el Explorador de Pruebas (Test > Windows > Test Explorer).
    • Visual Studio detectará automáticamente las pruebas y las mostrará en el Explorador de Pruebas.
  2. Ejecutar Pruebas:

    • Selecciona las pruebas que deseas ejecutar y haz clic en Run All o Run Selected.

Usando la Línea de Comandos

Si prefieres usar la línea de comandos, puedes ejecutar las pruebas con dotnet test:

dotnet test

Ejercicios Prácticos

Ejercicio 1: Prueba de Multiplicación

Escribe una función multiply que multiplique dos números y una prueba unitaria para verificar su funcionamiento.

Solución

Código a Probar:

module MathFunctions =
    let multiply x y = x * y

Prueba Unitaria:

open NUnit.Framework
open MathFunctions

[<TestFixture>]
type MathFunctionsTests() =

    [<Test>]
    member this.``Multiply should return the product of two numbers``() =
        let result = multiply 2 3
        Assert.AreEqual(6, result)

Ejercicio 2: Prueba de División

Escribe una función divide que divida dos números y una prueba unitaria para verificar su funcionamiento. Asegúrate de manejar la división por cero.

Solución

Código a Probar:

module MathFunctions =
    let divide x y =
        if y = 0 then
            failwith "Cannot divide by zero"
        else
            x / y

Prueba Unitaria:

open NUnit.Framework
open MathFunctions

[<TestFixture>]
type MathFunctionsTests() =

    [<Test>]
    member this.``Divide should return the quotient of two numbers``() =
        let result = divide 6 3
        Assert.AreEqual(2, result)

    [<Test>]
    member this.``Divide should throw an exception when dividing by zero``() =
        Assert.Throws<System.Exception>(fun () -> divide 6 0 |> ignore)

Conclusión

En esta sección, has aprendido cómo configurar NUnit para realizar pruebas unitarias en F#, cómo escribir y ejecutar pruebas unitarias básicas, y cómo manejar excepciones en tus pruebas. Las pruebas unitarias son una herramienta poderosa para asegurar la calidad y la fiabilidad de tu código. En la siguiente sección, exploraremos pruebas basadas en propiedades con FsCheck para llevar tus pruebas al siguiente nivel.

Curso de Programación en F#

Módulo 1: Introducción a F#

Módulo 2: Conceptos Básicos

Módulo 3: Programación Funcional

Módulo 4: Estructuras de Datos Avanzadas

Módulo 5: Programación Orientada a Objetos en F#

Módulo 6: Programación Asíncrona y Paralela

Módulo 7: Acceso y Manipulación de Datos

Módulo 8: Pruebas y Depuración

Módulo 9: Temas Avanzados

Módulo 10: Aplicaciones Prácticas

© Copyright 2024. Todos los derechos reservados