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:

gem install minitest

Estructura del Projecte

És recomanable organitzar les proves en un directori separat dins del teu projecte. Una estructura típica podria ser:

my_project/
├── lib/
│   └── my_class.rb
└── test/
    └── test_my_class.rb

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:

class MyClass
  def add(a, b)
    a + b
  end
end

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

  1. Requereix Minitest i la Classe a Provar:

    require 'minitest/autorun'
    require_relative '../lib/my_class'
    
  2. Definició de la Classe de Prova:

    class TestMyClass < Minitest::Test
    
  3. 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.

  4. 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 de MyClass retorna el valor esperat.

Executar les Proves

Per executar les proves, simplement executa el fitxer de prova amb Ruby:

ruby test/test_my_class.rb

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ó

  1. Crea una classe Calculator amb un mètode multiply que multipliqui dos números.
  2. Escriu una prova unitària per al mètode multiply.

Solució

Codi de la Classe (lib/calculator.rb):

class Calculator
  def multiply(a, b)
    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
end

Exercici 2: Prova per a un Mètode de Divisió amb Gestió d'Errors

  1. Afegeix un mètode divide a la classe Calculator que divideixi dos números i gestioni la divisió per zero.
  2. 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.

© Copyright 2024. Tots els drets reservats