SubUnit es un protocolo de transmisión de resultados de pruebas, que permite la comunicación entre las pruebas unitarias y un arnés de prueba . Fue desarrollado originalmente para pruebas unitarias en 2005 por Robert Collins. La subunidad viene con filtros de línea de comando para procesar un flujo de subunidad y enlaces de lenguaje para Python , C , C ++ y Shell. Los enlaces son fáciles de escribir para otros idiomas.
Se pueden hacer fácilmente varias cosas útiles con SubUnit:
- Agregación de pruebas: las pruebas que se ejecutan por separado pueden combinarse y luego informarse / mostrarse juntas.
- Archivo de prueba : una ejecución de prueba se puede grabar y reproducir más tarde.
- Aislamiento de prueba : las pruebas que pueden fallar o interactuar mal entre sí pueden ejecutarse por separado y luego agregarse.
- Pruebas de cuadrícula : SubUnit puede actuar como la serialización y deserialización necesarias para que las ejecuciones de prueba en máquinas distribuidas se informen en tiempo real.
Versiones
Hay dos revisiones importantes del protocolo. La versión 1 era trivialmente legible por humanos, pero tenía defectos significativos en lo que respecta a las pruebas altamente paralelas: no tenía espacio para realizar el descubrimiento y la ejecución en paralelo, requería un almacenamiento en búfer sustancial al realizar la multiplexación y era frágil: un byte corrupto podría causar que se produjera una transmisión mal analizado. La versión 1.1 agregó encapsulación de flujos binarios que mitigaron algunos de los problemas, pero el núcleo permaneció.
La versión 2 comparte muchas de las buenas características de la versión 1: se puede incrustar en un flujo de texto normal (por ejemplo, desde un sistema de compilación) y aún modela la ejecución de pruebas de estilo xUnit . También soluciona muchos de los problemas con la Versión 1: la Versión 2 se puede multiplexar sin un almacenamiento excesivo en búfer (en tiempo o espacio), tiene un mecanismo de recuperación bien definido para lidiar con flujos corruptos (por ejemplo, cuando dos procesos escriben en el mismo flujo al mismo tiempo, o donde el generador de flujo sufre un error).
Ejemplos de uso
A continuación, se muestra un ejemplo del formato general de SubUnit:
tiempo : el año 2016 - 03 - 24 de 21 : 05 : 38.652075 Z prueba : mytest . SampleTestCase . error de runTest : mytest . SampleTestCase . runTest [ Rastreo ( más reciente llamada última ): Archivo "/media/windows/dev/java/qaworkspace/pythonnosetests/src/mytest.py" , línea 11 , en runTest auto . assertEqual ( len ( s ), 4 , 'longitud incorrecto' ) AssertionError : incorrecto longitud ] tiempo : 2011 - 05 - 2322 : 49 : 38.858163 Z