¿Qué marco de prueba de unidad puedo usar para un proyecto mcu basado en c?

15

Estoy pensando en cómo puedo usar las pruebas unitarias en mi proyecto mcu, y qué marcos puedo usar para simplificarlo.

Hoy estoy usando un stm32 con OpenOCD-jtag desde una PC con Linux, donde todo está controlado desde un Makefile clásico y compilado de forma cruzada con gcc.

Yo podría crear algo yo mismo, pero si hay un marco que pueda usar sería bueno. (Es una ventaja si el marco puede generar el resultado en un formato que Jenkins / Hudson puede leer).

¿Hay alguna forma de utilizar un marco de prueba de unidad con un stm32?

    
pregunta Johan

6 respuestas

4

Consulte CppUTest y el excelente enlace de James Grenning

CppUTest es compatible con C y C ++, y tiene un buen conjunto de plantillas de Makefile que me ayudaron a comenzar con bastante rapidez.

    
respondido por el blalor
5

Hay muchas variables que determinarán el mejor marco de pruebas de unidad para usar en su situación. Algunos elementos que pueden afectar su elección serán:

  • El idioma de destino.
  • ¿Qué soporte de biblioteca está disponible? por ejemplo, libc o una versión reducida del mismo.
  • El sistema operativo del objetivo. por ejemplo, Ninguno, FreeRTOS, personalizado.

La mayoría de los marcos de tipo xUnit proporcionarán algún nivel básico de funcionalidad que puede ser útil. He usado Cunit con cierto éxito en el pasado. (paquete libcunit1-dev en Ubuntu / Debian). La mayoría de los marcos requerirán que libc esté disponible, algunos requerirán soporte adicional del sistema operativo.

Otra alternativa que solo tiene 3 líneas es Minunit .

Descubrí que las pruebas de unidad que utilizan el microcontrolador como objetivo son bastante engorrosas, ya que es necesario presentar un entorno adecuado para descargar pruebas, ejecutarlas y luego obtener resultados. Solo poner la plataforma en su lugar que le permitirá hacer esto es una gran tarea.

Otro enfoque que he tomado y que me ha funcionado es realizar pruebas unitarias en el host, implementando una capa de abstracción entre los controladores y el código de la aplicación. Ya que estás usando gcc para el destino, el código también debe compilarse en el host.

En general, las pruebas en el host de compilación son mucho más fáciles, ya que cuenta con el soporte completo del SO host y todas sus herramientas. Por ejemplo, al realizar pruebas en el host, tengo una versión simulada de mi controlador inalámbrico con la misma interfaz que el controlador real que se ejecuta en el destino. La versión del host utiliza paquetes UDP para simular la transferencia inalámbrica de paquetes, con el controlador simulado que admite la capacidad de descartar paquetes para que pueda probar mis protocolos.

En el producto en el que estaba trabajando, se estaba usando un sistema operativo de subprocesos, por lo que la capa de abstracción para las pruebas en el sistema operativo host usaba pthreads en su lugar.

Aunque no es perfecto, cuanto más fácil sea para usted escribir y ejecutar pruebas, es más probable que implemente más casos de prueba. Otra ventaja de tener el código ejecutado en diferentes plataformas es probar que el código es portátil. Recogerá rápidamente los errores de Endian si las arquitecturas de destino y host difieren.

Ahora estoy un poco fuera de tema, pero creo que estas ideas pueden ayudarte con tu elección del marco de prueba y los métodos de prueba.

    
respondido por el Austin Phillips
1

Revise embUnit enlace . Es un marco de prueba de unidad C integrado con una huella baja.

Lo usamos con éxito en un par de proyectos de microcontroladores integrados. No espere las opciones y características que obtiene con un marco de prueba de unidad de escritorio. Pero definitivamente es lo suficientemente poderoso.

Tiene un montón de aserciones definidas para usted, por lo que no tiene que perder mucho tiempo escribiendo aserciones personalizadas como con minUnit.

    
respondido por el sillevl
1

Hace algún tiempo escribí un tutorial completo sobre el tema: aplicaciones C de prueba de unidades (incrustadas) con Ceedling ; Utilizo estas técnicas en un montón de proyectos, y estoy muy contento hasta ahora.

    
respondido por el Dmitry Frank
0

Yo solo estaba investigando esto. Encontré un artículo de tres partes que describe un marco de prueba de unidad aquí:

enlace

También estaría de acuerdo con todo lo que Austin ha mencionado.

    
respondido por el Tim
-1

Pruebe la pelusa, pero no creo que sea para pruebas unitarias, sino para el análisis de código.

    
respondido por el LEM Adane

Lea otras preguntas en las etiquetas