test how example create testing sbt scalatest

testing - how - ScalaTest in sbt: ¿hay alguna manera de ejecutar una prueba única sin etiquetas?



scala test example (3)

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

test-only *class -- -n Tag

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

test-only *class -- -X 2

significaría "ejecutar la segunda prueba en la clase. Lo que sea". Tenemos un montón de pruebas y nadie se molestó en etiquetarlas, entonces ¿hay alguna forma de ejecutar una prueba sin que tenga una etiqueta?


Esto ahora es compatible (desde ScalaTest 2.1.3) con:

testOnly *MySuite -- -z foo

para ejecutar solo las pruebas cuyo nombre incluye la subcadena "foo".

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


No veo una manera de ejecutar una única prueba sin etiquetar dentro de una clase de prueba, pero proporciono mi flujo de trabajo, ya que parece ser útil para cualquier persona que se encuentre con esta pregunta.

Desde dentro de una sesión sbt:

test:test-only *YourTestClass

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

Todas las pruebas dentro de esa clase de prueba se ejecutarán. Presumiblemente, lo que más le preocupa son las pruebas fallidas, por lo tanto, corrija las implementaciones que fallen y luego ejecute:

test:test-quick

... que solo ejecutará las pruebas que fallaron. (Repetir la test:test-only ejecutada más recientemente test:test-only comando de test:test-only será el mismo que el de test:test-quick en este caso, pero si divide los métodos de prueba en clases de prueba apropiadas, puede usar un comodín para hacer la test:test-quick una forma más eficiente de volver a ejecutar las 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 etiquetelos adecuadamente. (Esto podría ser una señal de que la clase sometida a prueba infringe el principio de responsabilidad única y podría utilizar una refactorización).


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

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

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

test:testOnly *LoginServiceSpec

Si está ejecutando el comando desde fuera de la consola SBT, haría lo siguiente:

sbt "test:testOnly *LoginServiceSpec"