Estoy pensando en cómo puedo usar 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 se controla desde un Makefile clásico y se combina con gcc.
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 pueda leer).
¿Hay alguna manera de usar un marco de prueba de unidad con un stm32?
Respuestas:
Echa un vistazo a CppUTest, y el excelente http://pragprog.com/book/jgade/test-driven-development-for-embedded-c de James Grenning
CppUTest tiene soporte para C y C ++, y tiene un buen conjunto de plantillas Makefile que me ayudaron a comenzar bastante rápido.
fuente
Hay muchas variables que determinarán el mejor marco de pruebas unitarias para usar en su situación. Algunos elementos que pueden afectar su elección serán:
La mayoría de los marcos de tipo xUnit proporcionarán un 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 tiene solo 3 líneas es Minunit .
He encontrado que las pruebas unitarias usando el microcontrolador como objetivo son bastante engorrosas, ya que necesita poder presentar un entorno adecuado para descargar pruebas, ejecutarlas y luego obtener resultados. Simplemente poner la plataforma en su lugar que le permitirá hacer esto es una gran tarea.
Otro enfoque que he adoptado 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. Como está utilizando gcc para el destino, el código también debe compilarse en el host.
Las pruebas en el host de compilación generalmente son mucho más fáciles ya que tiene el soporte completo del sistema operativo host y todas sus herramientas. Por ejemplo, cuando pruebo 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 de host utiliza paquetes UDP para simular la transferencia inalámbrica de paquetes, y el controlador simulado admite la capacidad de descartar paquetes para que pueda probar mis protocolos.
En el producto en el que estaba trabajando, se estaba utilizando un sistema operativo con subprocesos, por lo que la capa de abstracción para probar en el sistema operativo host usó pthreads en su lugar.
Si bien 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. Otro beneficio de tener el código ejecutado en diferentes plataformas es probar que el código es portátil. Recogerá rápidamente errores endianos si las arquitecturas objetivo y host difieren.
Ahora estoy un poco fuera de tema, pero siento que estas ideas pueden ayudarlo con su elección del marco de prueba y los métodos de prueba.
fuente
Echa un vistazo a embUnit http://embunit.sourceforge.net/embunit/index.html . 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 potente.
Tiene una gran cantidad de afirmaciones definidas para usted, por lo que no tiene que perder mucho tiempo escribiendo afirmaciones personalizadas como con minUnit.
fuente
Hace algún tiempo escribí un tutorial completo sobre el tema: Pruebas unitarias (incrustadas) de aplicaciones C con Ceedling ; Utilizo estas técnicas en muchos proyectos, y estoy muy feliz hasta ahora.
fuente
Solo estaba investigando esto yo mismo. Encontré un artículo de tres partes que describe un marco de prueba de unidad aquí:
http://www.eetimes.com/design/embedded/4007177/Doing-C-code-unit-testing-on-a-shoestring-Part-1-The-basics-and-the-tools
También estaría de acuerdo con todo lo que Austin ha mencionado.
fuente
Prueba con pelusa, pero no creo que sea para pruebas unitarias, es para análisis de código.
fuente