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
endExplicació 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 endAquest 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) endAquest mètode comprova que el mètode
adddeMyClassretorna 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
Calculatoramb un mètodemultiplyque 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
endExercici 2: Prova per a un Mètode de Divisió amb Gestió d'Errors
- Afegeix un mètode
dividea la classeCalculatorque 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
endCodi 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
endResum
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
