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)