Introducció a les Proves Unitàries
Les proves unitàries són una part fonamental del desenvolupament de programari, ja que permeten verificar que les unitats individuals de codi (com ara mètodes o funcions) funcionen correctament. En Ruby, una de les biblioteques més populars per a les proves unitàries és Minitest.
Què és Minitest?
Minitest és una biblioteca de proves per a Ruby que proporciona un conjunt complet d'eines per a les proves unitàries, proves d'acceptació, proves de rendiment i molt més. És lleugera, fàcil d'utilitzar i ve inclosa amb Ruby per defecte.
Configuració de Minitest
Instal·lació
Com que Minitest ve inclòs amb Ruby, no cal instal·lar res addicional. No obstant això, si vols assegurar-te que tens la versió més recent, pots instal·lar-la mitjançant gem
:
Estructura del Projecte
És recomanable organitzar les proves en un directori separat dins del teu projecte. Una estructura típica podria ser:
Creació de Proves amb Minitest
Exemple Bàsic
A continuació, es mostra un exemple bàsic de com crear una prova unitària amb Minitest.
Codi de la Classe
Primer, creem una classe simple que volem provar. Guardem aquest codi a lib/my_class.rb
:
Codi de la Prova
Ara, creem una prova per a la nostra classe. Guardem aquest codi a test/test_my_class.rb
:
require 'minitest/autorun' require_relative '../lib/my_class' class TestMyClass < Minitest::Test def setup @my_class = MyClass.new end def test_add assert_equal 4, @my_class.add(2, 2) end end
Explicació del Codi
-
Requereix Minitest i la Classe a Provar:
require 'minitest/autorun' require_relative '../lib/my_class'
-
Definició de la Classe de Prova:
class TestMyClass < Minitest::Test
-
Mètode
setup
:def setup @my_class = MyClass.new end
Aquest mètode s'executa abans de cada prova, inicialitzant una instància de
MyClass
. -
Mètode de Prova:
def test_add assert_equal 4, @my_class.add(2, 2) end
Aquest mètode comprova que el mètode
add
deMyClass
retorna el valor esperat.
Executar les Proves
Per executar les proves, simplement executa el fitxer de prova amb Ruby:
Si tot està configurat correctament, hauries de veure una sortida similar a aquesta:
Run options: --seed 12345 # Running: . Finished in 0.001234s, 1.0000 runs/s, 1.0000 assertions/s. 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
Exercicis Pràctics
Exercici 1: Prova per a un Mètode de Multiplicació
- Crea una classe
Calculator
amb un mètodemultiply
que multipliqui dos números. - Escriu una prova unitària per al mètode
multiply
.
Solució
Codi de la Classe (lib/calculator.rb
):
Codi de la Prova (test/test_calculator.rb
):
require 'minitest/autorun' require_relative '../lib/calculator' class TestCalculator < Minitest::Test def setup @calculator = Calculator.new end def test_multiply assert_equal 6, @calculator.multiply(2, 3) end end
Exercici 2: Prova per a un Mètode de Divisió amb Gestió d'Errors
- Afegeix un mètode
divide
a la classeCalculator
que divideixi dos números i gestioni la divisió per zero. - Escriu una prova unitària per al mètode
divide
, incloent-hi la gestió d'errors.
Solució
Codi de la Classe (lib/calculator.rb
):
class Calculator def multiply(a, b) a * b end def divide(a, b) raise ArgumentError, 'Divisió per zero' if b == 0 a / b end end
Codi de la Prova (test/test_calculator.rb
):
require 'minitest/autorun' require_relative '../lib/calculator' class TestCalculator < Minitest::Test def setup @calculator = Calculator.new end def test_multiply assert_equal 6, @calculator.multiply(2, 3) end def test_divide assert_equal 2, @calculator.divide(6, 3) end def test_divide_by_zero assert_raises(ArgumentError) { @calculator.divide(6, 0) } end end
Resum
En aquesta secció, hem après com utilitzar Minitest per escriure proves unitàries en Ruby. Hem vist com configurar Minitest, crear proves bàsiques i executar-les. També hem practicat amb exercicis per reforçar els conceptes apresos. Les proves unitàries són una eina poderosa per assegurar la qualitat del codi i facilitar el manteniment del projecte a llarg termini.
Curs de Programació en Ruby
Mòdul 1: Introducció a Ruby
Mòdul 2: Conceptes Bàsics de Ruby
Mòdul 3: Treballant amb Col·leccions
Mòdul 4: Programació Orientada a Objectes en Ruby
- Classes i Objectes
- Variables i Mètodes d'Instància
- Variables i Mètodes de Classe
- Herència
- Mòduls i Mixins
Mòdul 5: Conceptes Avançats de Ruby
- Blocs, Procs i Lambdas
- Metaprogramació
- Gestió d'Excepcions
- Entrada/Sortida de Fitxers
- Expressions Regulars
Mòdul 6: Introducció a Ruby on Rails
- Què és Ruby on Rails?
- Configuració de l'Entorn Rails
- Creació d'una Aplicació Simple en Rails
- Arquitectura MVC
- Rutes
Mòdul 7: Proves en Ruby
- Introducció a les Proves
- Proves Unitàries amb Minitest
- Desenvolupament Basat en Comportament amb RSpec
- Mocking i Stubbing
Mòdul 8: Millors Pràctiques en Ruby
- Estil de Codi i Convencions
- Refactorització
- Optimització del Rendiment
- Millors Pràctiques de Seguretat