2011-12-13 8 views
9

Tengo una aplicación scala con algunas pruebas usando org.scalatest. Estas pruebas necesitan una configuración global (y desmontaje) para administrar la base de datos de prueba.org.scalatest: Configuración global (como beforeAllSuites?)

Por favor, no me diga que mis pruebas no deberían llegar a la base de datos y debería hacerlo con Java-DAO-Stub-WTF-Overkill-Way ™ :-).

estoy corriendo las pruebas con SBT, que proporciona una manera de ejecutar código antes y después de la prueba:

testOptions in Test += Tests.Setup(() => println("Setup")) 

    testOptions in Test += Tests.Cleanup(() => println("Cleanup")) 

Por desgracia, no puede acceder a las clases que se trate allí. Como era de esperar, importarlos a build.sbt tampoco funciona.

¿Alguna idea?

+0

Tenía un objetivo muy similar y encontré una solución. Verifique esta pregunta: http://stackoverflow.com/questions/27272811/how-to-cut-a-long-scalatest-spec-to-pieces/27275814 Quería mantener también el paso de inicialización como clase de prueba. – akauppi

Respuesta

4

Puede usar los rasgos BeforeAndAfterAll o BeforeAndAfter, según sus necesidades.

BeforeAndAfterAll:

rasgo que puede ser mezclado en suites que necesitan métodos invocados antes y después de la ejecución de la suite. Este rasgo permite que el código se ejecute antes y/o después de que todas las pruebas y suites anidadas de un conjunto se ejecuten en .

Por lo tanto, en este caso, definiría un MasterSuite que contiene todas las otras Suites/Pruebas, lo que extiende este rasgo.

BeforeAndAfter:

rasgo que puede ser mezclado en suites que necesitan código ejecutado antes y después de correr cada prueba. Este rasgo facilita un estilo de prueba en que los objetos de fijación mutables mantenidos en variables de instancia son reemplazados o reinicializados antes de cada prueba o suite.

+3

Definir un MasterSuite significaría que toda mi prueba debe definirse en un solo archivo, ¿verdad? Por ahora, he separado toda la prueba dependiente de la base de datos en una suite y uso BeforeAndAfterAll allí. Esto también tiene la ventaja de que puedo saltear estas pruebas lentas fácilmente. –

+3

Años después, pero sigue siendo relevante para cualquiera que encuentre la pregunta: no necesita definir todas las pruebas en un solo archivo, ScalaTest tiene una funcionalidad de composición donde puede usar 'clase MasterSuite extends Suites (new OneSpec, new TwoSpec)' para que el las suites compuestas simplemente necesitan estar en el classpath (el Scaladoc 'BeforeAndAfter'll tiene un ejemplo de esto, por lo que es fácil de recordar). Dado que 2.0 ScalaTest tiene la anotación '@ DoNotDiscover' para que pueda detener SBT (o cualquier corredor de apoyo) ejecute todas las suites compuestas, solo el maestro. – ches

+0

En realidad, el autor lo cubre bien aquí: http://stackoverflow.com/questions/15423337/doing-something-before-or-after-all-scalatest-tests – ches

Cuestiones relacionadas