una tapizados sofas sofa simulador sillones sillon separados programa por pieza para modulos modulares modernos hacer fama scala testing playframework playframework-2.0 fixtures

scala - tapizados - sofas modulares modernos



¡Accesorios en juego! 2 para Scala (2)

¿Por qué no usar el ejemplo de Java en Scala? Ese código exacto también debería funcionar sin modificaciones en Scala ...

¡Estoy intentando hacer algunas pruebas de integración en una Play! 2 para la aplicación Scala. Para esto, necesito cargar algunos accesorios para tener el DB en un estado conocido antes de cada prueba.

Por el momento, solo estoy invocando un método que ejecuta un montón de instrucciones de Squeryl para cargar datos. Pero declarar los dispositivos de manera declarativa, ya sea con un DSL de Scala o en un lenguaje como JSON o YAML es más legible y fácil de mantener.

En este ejemplo de una aplicación Java, veo que los dispositivos se cargan desde un archivo YAML, pero la aplicación Scala equivalente recurre a la carga manual, como lo estoy haciendo en este momento.

También encontré este proyecto que no está muy bien documentado, y parece un poco más complejo de lo que me gustaría, ni siquiera está claro dónde se declaran los datos del dispositivo.

¿Hay alguna otra opción para cargar accesorios en una Play! ¿solicitud?


Usa Evoluciones. Escriba una secuencia de comandos de configuración y desmontaje para los dispositivos en SQL, o use mysqldump (o equivalente para su base de datos) para exportar una base de datos de prueba existente como sql.

http://www.playframework.org/documentation/1.2/evolutions

Encuentro que la forma más libre de estrés para hacer pruebas es configurar todo en una base de datos en memoria, lo que significa que las pruebas se ejecutan rápidamente y conducen las pruebas desde Java utilizando JUnit. Yo uso H2DB, pero hay algunos problemas que debes tener en cuenta. Aprendí esto de la manera difícil, así que esto debería ahorrarle algo de tiempo.

Play tiene un buen sistema para configurar y destruir su aplicación para pruebas de integración, usando Running (FakeAplication ()) {..}, y puede configurarlo para utilizar una base de datos en memoria con FakeApplication (additionalConfiguration = inMemoryDatabase ()) see :

http://www.playframework.org/documentation/2.0/ScalaTest

Errores de OutOfMemory: Sin embargo, ejecutar un accesorio de prueba considerable algunas veces en mi máquina causó errores de OutOfMemory. Esto parece ser debido a que la implementación predeterminada de la función inMemoryDatabase () crea una nueva base de datos con nombre aleatorio y no limpia las antiguas entre las ejecuciones de prueba. Esto no es necesario si ha escrito correctamente los scripts de eliminación de evolución, ya que la base de datos se vaciará y volverá a llenar entre cada prueba. Así que desestimamos este comportamiento para usar la misma base de datos y los problemas de memoria desaparecieron.

DB Dialect: Otro problema es que nuestra base de datos de producción es MySQL, que tiene una serie de incompatibilidades con H2DB. H2DB tiene modos de compatibilidad para varios dbs, lo que debería reducir la cantidad de problemas que tienes:

http://www.h2database.com/html/features.html#compatibility

Poner todo esto junto hace que sea un poco difícil de agregar antes de cada prueba, así que lo extraje en una función:

def memDB[T](code: =>T) = running( FakeApplication( additionalConfiguration = Map( "db.default.driver" -> "org.h2.Driver", "db.default.url" -> "jdbc:h2:mem:test;MODE=MySQL" ) ) )(code)

Puede usarlo así (ejemplo de especificaciones):

"My app" should { "integrate nicely" in memDB { ..... } }

Cada prueba iniciará una aplicación falsa, ejecutará la secuencia de comandos de evolución de la configuración de dispositivo, ejecutará la prueba y luego la volverá a arrancar. ¡Buena suerte!