ruby - Configuración global y bloques de desmontaje en Prueba:: Unidad
testunit (2)
Suponiendo que estés usando Rails. Simplemente agregue lo siguiente en su test/test_helper.rb
archivo.
class ActiveSupport::TestCase
setup :global_setup
def global_setup
#stuff to run before _every_ test.
end
end
Probado en rieles 3.0.9.
¿Cuál es la mejor manera de ejecutar una configuración antes de cada método en un conjunto de pruebas completo (no solo una clase de prueba)?
Rspec le permite definir bloques globales antes y después. ¿Existe una forma comparable de hacerlo en Test :: Unit que no implique mezclar un módulo en cada clase de prueba?
Simplemente puede parchear Test::Unit::TestCase
y definir un método de setup
:
class Test::Unit::TestCase
def setup
puts ''in setup''
end
end
Y tus subclases solo usarían esto por defecto:
class FooTest < Test::Unit::TestCase
def test_truth
assert true
end
end
class BarTest < Test::Unit::TestCase
def test_truth
assert true
end
end
Si un caso de prueba necesita tener su propia configuración, deberá llamar a super
primero para asegurarse de que se ejecuta la configuración global:
class BazTest < Test::Unit::TestCase
def setup
super
puts ''custom setup''
end
def test_truth
assert true
end
end
¿Tener una configuración global realmente es algo que necesita hacer, o sería útil tener un método de ayuda definido en Test::Unit::TestCase
y llamar a eso en las pruebas que lo necesitan? El enfoque del método auxiliar es algo que me parece beneficioso en mis proyectos: el estado de configuración y la intención son más claros en cada prueba individual y no necesito saltar para encontrar algún método de configuración "oculto". Muy a menudo, una configuración global es un olor de código que indica que necesita replantearse parte de su diseño, pero YMMV.
Actualizar
Ya que está utilizando ActiveSupport, aquí hay un primer intento por algo que no requerirá una llamada a super
cada vez que defina un método de setup
en su caso de prueba. No sé lo valioso que es, ya que requiere una llamada a un método diferente y cualquier desarrollador puede definir su propio método de setup
en el caso de prueba que invalidará este cambio. Aquí está:
require ''rubygems''
require ''test/unit''
require ''active_support''
require ''active_support/test_case''
class ActiveSupport::TestCase
def setup_with_global
puts ''In Global setup''
setup_without_global
end
alias_method_chain :setup, :global
end
class FooTest < ActiveSupport::TestCase
def setup_without_global
puts ''In Local setup''
end
def test_truth
assert true
end
end