ScalaTest en sbt: ¿hay alguna manera de ejecutar una sola prueba sin etiquetas?


Sé que una sola prueba se puede ejecutar ejecutando, en sbt,

test-only *class -- -n Tag

¿Hay alguna forma de decirle a sbt/scalatest que ejecute una sola prueba sin etiquetas? Por ejemplo:

test-only *class -- -X 2

Significaría "ejecutar la segunda prueba en la clase. Sea lo que sea". Tenemos un montón de pruebas y nadie se molestó en etiquetarlas, así que ¿hay alguna manera de ejecutar una sola prueba sin que tenga una etiqueta?

Author: Chris Martin, 2012-06-22

3 answers

Esto ahora está soportado (desde ScalaTest 2.1.3) con:

testOnly *MySuite -- -z foo

Ejecutar solo las pruebas cuyo nombre incluya la subcadena "foo".

Para coincidencia exacta en lugar de subcadena, use -t en lugar de -z.

 147
Author: Seth Tisue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-07 19:43:48

Quería añadir un ejemplo concreto para acompañar las otras respuestas

Necesita especificar el nombre de la clase que desea probar, por lo que si tiene el siguiente proyecto (este es un proyecto Play):

Proyecto de Juego

Puede probar solo las pruebas Login ejecutando el siguiente comando desde la consola SBT:

test:testOnly *LoginServiceSpec

Si está ejecutando el comando desde fuera de la consola SBT, debe hacer lo siguiente:

sbt "test:testOnly *LoginServiceSpec"
 48
Author: Tyler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-29 20:54:13

No veo una manera de ejecutar una sola prueba sin etiquetar dentro de una clase de prueba, pero estoy proporcionando mi flujo de trabajo, ya que parece ser útil para cualquiera que se encuentre con esta pregunta.

Desde una sesión de sbt:

test:test-only *YourTestClass

(El asterisco es un comodín, puede especificar la ruta completa com.example.specs.YourTestClass.)

Se ejecutarán todas las pruebas dentro de esa clase de prueba. Presumiblemente usted está más preocupado con pruebas fallidas, así que corrija cualquier implementación fallida y luego ejecute:

test:test-quick

... que solo ejecutará pruebas que hayan fallado. (Repetir el comando test:test-only ejecutado más recientemente será lo mismo que test:test-quick en este caso, pero si divide sus métodos de prueba en clases de prueba apropiadas, puede usar un comodín para hacer que test:test-quick sea una forma más eficiente de volver a ejecutar pruebas fallidas.)

Tenga en cuenta que la nomenclatura para la prueba en ScalaTest es una clase de prueba, no un método de prueba específico, por lo que se ejecutan todos los métodos sin etiquetar.

Si tiene demasiados métodos de prueba en una clase de prueba, divídalos en clases separadas o etiquetarlas apropiadamente. (Esto podría ser una señal de que la clase bajo prueba viola el principio de responsabilidad única y podría usar una refactorización.)

 42
Author: cfeduke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-26 14:27:51