ruby testunit

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