Introducción al Testing en Ruby

La flexibilidad de Ruby hace fácil escribir test.

vehiculo.rb

class Vehiculo
  attr_accessor :marca

  def initialize(marca,color)
    @marca = marca
    @color = color
  end

  def to_s
    "Vehiculo:#{marca}\tColour:#{color}"
  end

end

test.rb

require './vehiculo'
vehiculo_ejemplo = Vehiculo.new("irrelevant","irrelevant")

fail "Should be return the vehicle brand" unless vehiculo_ejemplo.marca == "irrelevant"

Como el numero de test en un proyecto va creciendo, con este enfoque ad-hoc puede empezar a complicarse la gestión de los test. Por eso surgen los frameworks para facilitarnos las tareas. En Ruby viene preinstalado del Test::Unit.

Framework Test::Unit

Son 3 utilidades envueltas en el framework:

  • Da una manera de expresar las pruebas invididuales
  • Proporciona un marco para la estructura de pruebas
  • Da formas flexibles de invocar las pruebas.
require './vehiculo'
require 'test/unit'
class TestVehiculo < Test::Unit::TestCase

  def test_marca
    vehiculo_ejemplo = Vehiculo.new("irrelevant","irrelevant")

    assert_equal("irrelevant",vehiculo_ejemplo.marca)
  end

end

Ejecución

Para ejecutar los test lo haremos desde la terminal:

ruby nombre_archivo.rb

#RESULTADO:
# Loaded suite blocks
# Started
#     .
#     Finished in 0.0012818 seconds.
#     ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# 1 tests, 3 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
# 100% passed
# ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# 780.15 tests/s, 2340.46 assertions/s

Si queremos ejecutar un solo método:

ruby nombre_fichero.rb --name test_nombre

Observaciones

Las clases que representan los casos de prueba deben ser subclases de Test::Unit::TestCase

Los métodos que llevan las afirmaciones(asserts) deben tener nombres que empiezan con test.

El método setup  ejecutará lo que lleve dentro antes de cada test (beforeEach)

El método teardown ejecutará lo que lleve dentro después de cada test (afterEach)