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
-
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
-
-
Configura tu proyecto de pruebas:
- Crea un nuevo proyecto de pruebas en tu solución. En Visual Studio, selecciona
Archivo > Nuevo > Proyecto
y eligeProyecto de Pruebas Unitarias (.NET Core)
. - Asegúrate de que tu proyecto de pruebas tenga referencias a NUnit y NUnit3TestAdapter.
- Crea un nuevo proyecto de pruebas en tu solución. En Visual Studio, selecciona
Escribiendo Pruebas Unitarias
Estructura Básica de una Prueba Unitaria
Una prueba unitaria en NUnit generalmente sigue esta estructura:
- Atributos de Prueba: Indican que un método es una prueba.
- 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:
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ónadd
sea igual a 5.
Ejecutando Pruebas Unitarias
Usando Visual Studio
-
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.
- Abre el
-
Ejecutar Pruebas:
- Selecciona las pruebas que deseas ejecutar y haz clic en
Run All
oRun Selected
.
- Selecciona las pruebas que deseas ejecutar y haz clic en
Usando la Línea de Comandos
Si prefieres usar la línea de comandos, puedes ejecutar las pruebas con 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:
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:
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
- Tipos de Datos y Variables
- Funciones e Inmutabilidad
- Coincidencia de Patrones
- Colecciones: Listas, Arreglos y Secuencias
Módulo 3: Programación Funcional
- Funciones de Orden Superior
- Recursión
- Encadenamiento y Composición
- Aplicación Parcial y Currificación
Módulo 4: Estructuras de Datos Avanzadas
Módulo 5: Programación Orientada a Objetos en F#
- Clases y Objetos
- Herencia e Interfaces
- Mezclando Programación Funcional y Orientada a Objetos
- Módulos y Espacios de Nombres
Módulo 6: Programación Asíncrona y Paralela
- Flujos de Trabajo Asíncronos
- Biblioteca de Tareas Paralelas
- MailboxProcessor y Agentes
- Patrones de Concurrencia
Módulo 7: Acceso y Manipulación de Datos
Módulo 8: Pruebas y Depuración
- Pruebas Unitarias con NUnit
- Pruebas Basadas en Propiedades con FsCheck
- Técnicas de Depuración
- Perfilado de Rendimiento