Pregunta

programo en su mayoría en Scala y Java, utilizando scalatest en Scala y JUnit para las pruebas unitarias. Me gustaría aplicar las mismas pruebas a varias implementaciones de la misma interfaz / rasgo. La idea es verificar que el contrato de interfaz se hace cumplir y verificar principio de sustitución Liskov.

Por ejemplo, cuando se prueba implementaciones de listas, pruebas podrían incluir:

  • Una instancia debe estar vacío, si y sólo si y sólo si tiene tamaño cero.
  • Después de llamar claro, el tamaño debe ser cero.
  • Adición de un elemento en el medio de una lista, se incrementará en uno el índice de elementos de RHS.
  • etc.

¿Cuáles son las mejores prácticas?

¿Fue útil?

Solución

Esto suena como que podría ser un trabajo para pruebas compartidos. pruebas compartidos son pruebas que son compartidos por diferentes objetos accesorio. Es decir, el mismo código de ensayo con diferentes datos. ScalaTest tiene soporte para eso. Buscar "pruebas compartidas" en la documentación de su estilo favorito rasgo que representa pruebas como funciones (SPEC, WordSpec, FunSuite, FlatSpec, etc.). Un ejemplo es la sintaxis para FlatSpec:

it should behave like emptyList

pruebas compartir en la documentación FlatSpec

Otros consejos

En Java / JUnit, por lo general ocupe de esto por tener un caso de prueba abstracta de la que pone a prueba para la clase de prueba específica heredar todas las pruebas y tener un método de configuración de una instancia de la aplicación. No puedo ver el video publicado abyx en este momento, pero sospecho que es esta idea general.

Otra posibilidad interesante si no te importa la introducción de un nuevo marco de pruebas sería utilizar Jdave clases especificación.

No he probado el uso de cualquiera de estos con Scalatest o con rasgos e implementaciones Scala, pero debería ser posible hacer algo similar.

pruebas de contrato son fáciles de ver con JUnit 4, aquí 'sa vídeo por Ben Rady.

Para Scala, considerar seriamente ScalaCheck. Todos esos contratos son expresables como especificaciones de una sola línea en ScalaCheck. Cuando se ejecuta, ScalaCheck generará un número configurable de entradas de muestra al azar, y comprobar que todas las especificaciones sostienen. Se trata de la más densa semánticamente manera posible para crear pruebas unitarias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top