Código de prueba de unidad C [cerrado]

854

Trabajé en un sistema embebido este verano escrito en línea C. Era un proyecto existente que la compañía para la que trabajo había asumido. Me he acostumbrado bastante a escribir pruebas unitarias en Java usando JUnit, pero no sabía cuál era la mejor manera de escribir pruebas unitarias para el código existente (que necesitaba una refactorización), así como el nuevo código agregado al sistema.

¿Hay algún proyecto que haga que las pruebas unitarias de código C simple sean tan fáciles como las pruebas unitarias de código Java con JUnit? Cualquier idea que se aplique específicamente al desarrollo integrado (compilación cruzada con la plataforma arm-linux) sería muy apreciada.

Paul Osborne
fuente
10
Eche un vistazo a cmocka.org
Mawg dice que reinstale a Mónica el
2
@zmo - Recomendaciones de software es el sitio de Stack Exchange para obtener recomendaciones de software. No lo he usado, así que no puedo decir qué tan bien funciona. Debe verificar sus reglas de publicación antes de publicar allí.
Jonathan Leffler

Respuestas:

496

Un marco de prueba de unidad en C es Check ; Aquí se puede encontrar una lista de marcos de pruebas unitarias en C y se reproduce a continuación. Dependiendo de cuántas funciones de biblioteca estándar tenga su tiempo de ejecución, puede o no usar una de ellas.

AceUnit

AceUnit (Advanced C and Embedded Unit) se presenta como un marco de prueba de unidad de código C cómodo. Intenta imitar JUnit 4.xy incluye capacidades de reflexión. AceUnit se puede usar en entornos de restricción de recursos, por ejemplo, desarrollo de software integrado, y lo que es más importante, funciona bien en entornos en los que no puede incluir un solo archivo de encabezado estándar y no puede invocar una única función C estándar de las bibliotecas ANSI / ISO C. También tiene un puerto de Windows. No utiliza horquillas para atrapar señales, aunque los autores han expresado interés en agregar dicha característica. Vea la página de inicio de AceUnit .

GNU Autounit

En la misma línea que Check, incluida la bifurcación para ejecutar pruebas unitarias en un espacio de direcciones separado (de hecho, el autor original de Check tomó prestada la idea de GNU Autounit). GNU Autounit usa GLib ampliamente, lo que significa que los enlaces y demás necesitan opciones especiales, pero esto puede no ser un gran problema para usted, especialmente si ya está usando GTK o GLib. Vea la página de inicio de GNU Autounit .

cUnit

También usa GLib, pero no se bifurca para proteger el espacio de direcciones de las pruebas unitarias.

UNIDAD

Estándar C, con planes para una implementación de GUI Win32. Actualmente no bifurca ni protege el espacio de direcciones de las pruebas unitarias. En desarrollo temprano. Vea la página de inicio de CUnit .

CuTest

Un marco simple con solo un archivo .c y un archivo .h que coloca en su árbol de origen. Ver la página de inicio de CuTest .

CppUnit

El principal marco de pruebas unitarias para C ++; También puede usarlo para probar el código C. Es estable, desarrollado activamente y tiene una interfaz GUI. Las razones principales para no usar CppUnit para C son primero que es bastante grande, y segundo, debes escribir tus pruebas en C ++, lo que significa que necesitas un compilador de C ++. Si esto no suena como una preocupación, definitivamente vale la pena considerarlo, junto con otros marcos de prueba de unidades C ++. Vea la página de inicio de CppUnit .

unidad

embUnit (Embedded Unit) es otro marco de prueba de unidad para sistemas embebidos. Este parece ser reemplazado por AceUnit. Página de inicio de la Unidad Embebida .

MinUnit

¡Un conjunto mínimo de macros y listo! El punto es mostrar cuán fácil es probar unitariamente su código. Vea la página de inicio de MinUnit .

CUnit para el Sr. Ando

Una implementación de CUnit que es bastante nueva, y aparentemente todavía está en desarrollo temprano. Vea la página web de CUnit para el Sr. Ando .

Esta lista se actualizó por última vez en marzo de 2008.

Más marcos:

CMocka

CMocka es un marco de prueba para C con soporte para objetos simulados. Es fácil de usar y configurar.

Vea la página de inicio de CMocka .

Criterio

Criterion es un marco de prueba de unidades C multiplataforma que admite el registro automático de pruebas, pruebas parametrizadas, teorías y que puede generar en múltiples formatos, incluidos TAP y JUnit XML. Cada prueba se ejecuta en su propio proceso, por lo que las señales y los bloqueos se pueden informar o probar si es necesario.

Consulte la página de inicio de Criterion para obtener más información.

HWUT

HWUT es una herramienta de prueba de unidad general con gran soporte para C. Puede ayudar a crear Makefiles, generar casos de prueba masivos codificados en 'tablas de iteración' mínimas, caminar a lo largo de máquinas de estado, generar C-stubs y más. El enfoque general es bastante único: los veredictos se basan en 'stdout bueno / stdout malo'. La función de comparación, sin embargo, es flexible. Por lo tanto, se puede usar cualquier tipo de secuencia de comandos para la comprobación. Se puede aplicar a cualquier idioma que pueda producir una salida estándar.

Vea la página de inicio de HWUT .

CGreen

Un marco de prueba y burla de unidades moderno, portátil y en varios idiomas para C y C ++. Ofrece una notación BDD opcional, una biblioteca de imitación, la capacidad de ejecutarla en un solo proceso (para facilitar la depuración). Un corredor de prueba que descubre automáticamente las funciones de prueba está disponible. Pero puedes crear tu propia programación.

Todas esas características (y más) se explican en el manual de CGreen .

Wikipedia proporciona una lista detallada de los marcos de prueba de unidad C en la Lista de marcos de prueba de unidad: C

Damien Flament
fuente
Inicialmente, Check se ve muy sólido. Tendré que ver cómo se mantiene bajo el fuego del uso real ... pero definitivamente parece que puede cumplir con los requisitos.
Paul Osborne
8
Utilizamos el código de verificación de unidad de prueba en nuestros sistemas integrados. En su mayor parte, la verificación fue una buena elección, pero ahora estamos trabajando en sistemas que se ejecutan en uClinux y, dado que la verificación requiere fork, no funciona en esos sistemas. : /
David Holm
1
@labyrinth La de Ubuntu data de 2002. La versión más actual es de este año (2014 a partir de este comentario). Tuve que compilarlo desde la fuente.
Barry Brown
44
HWUT genera stubs controlables a distancia, lo que es bastante útil si desea escribir pruebas para módulos que interactúan con controladores más difíciles. Esos controladores, en la mayoría de los casos, no están presentes en una PC. Documentación de HWUT
Frank-Rene Schäfer
1
Según la página de Github de Check , la última versión se 0.11.0lanzó el 17 de diciembre de 2016 .
Mandeep Sandhu
165

Personalmente me gusta el marco de prueba de Google .

La verdadera dificultad para probar el código C es romper las dependencias de los módulos externos para que pueda aislar el código en unidades. Esto puede ser especialmente problemático cuando intenta obtener pruebas de código heredado. En este caso, a menudo me encuentro usando el enlazador para usar funciones de código auxiliar en las pruebas.

A esto se refiere la gente cuando habla de " costuras ". En C, su única opción es usar el preprocesador o el enlazador para burlarse de sus dependencias.

Un conjunto de pruebas típico en uno de mis proyectos en C podría verse así:

#include "myimplementationfile.c"
#include <gtest/gtest.h>

// Mock out external dependency on mylogger.o
void Logger_log(...){}

TEST(FactorialTest, Zero) {
    EXPECT_EQ(1, Factorial(0));
}

Tenga en cuenta que en realidad está incluyendo el archivo C y no el archivo de encabezado . Esto brinda la ventaja de acceso a todos los miembros de datos estáticos. Aquí me burlo de mi registrador (que podría estar en logger.o y le doy una implementación vacía. Esto significa que el archivo de prueba se compila y enlaza independientemente del resto de la base de código y se ejecuta de forma aislada.

En cuanto a la compilación cruzada del código, para que esto funcione, necesita buenas instalaciones en el destino. He hecho esto con googletest cross compilado a Linux en una arquitectura PowerPC. Esto tiene sentido porque allí tiene un shell completo y un sistema operativo para recopilar sus resultados. Para entornos menos ricos (que clasifico como cualquier cosa sin un sistema operativo completo), solo debe compilar y ejecutar en el host. Debería hacer esto de todos modos para poder ejecutar las pruebas automáticamente como parte de la compilación.

Encuentro que probar el código C ++ generalmente es mucho más fácil debido al hecho de que el código OO en general está mucho menos acoplado que el procedimiento (por supuesto, esto depende mucho del estilo de codificación). También en C ++ puede usar trucos como la inyección de dependencia y la anulación de métodos para obtener uniones en el código que de otro modo está encapsulado.

Michael Feathers tiene un excelente libro sobre pruebas de código heredado . En un capítulo, él cubre técnicas para lidiar con código que no es OO, lo cual recomiendo encarecidamente.

Editar : he escrito una publicación de blog sobre el código de procedimiento de prueba de unidad, con fuente disponible en GitHub .

Editar : Hay un nuevo libro que sale de los Programadores Pragmáticos que aborda específicamente el código C de prueba de unidad que recomiendo encarecidamente .

revs mikelong
fuente
17
No compres el prag. libro prog. No contiene ninguna información que no esté en las respuestas a esta pregunta.
Phil
3
Sé que C y C ++ tienen una gran superposición, pero no me parece una buena idea usar una biblioteca de prueba de C ++ cuando estás produciendo código que finalmente se compilará en un compilador de C.
Rafael Almeida
2
@RafaelAlmeida en esencia, estoy de acuerdo, lo que muestro aquí es una costura de preprocesador sin envolver la C incluida en una C. externa Independientemente de eso, encontré C ++ bastante útil como lenguaje de descripción de prueba en la práctica. También he escrito un marco basado en C para las pruebas, así que no soy dogmático sobre esto :-) github.com/meekrosoft/fff
mikelong
@ Phil no estoy de acuerdo. El libro me pareció muy valioso, especialmente para alguien que no es realmente fuerte en C.
CHendrix,
Estoy usando el Marco de funciones falsas para burlarse de las funciones HAL, como se indicó anteriormente. Funciona muy bien con gTest. github.com/meekrosoft/fff
Leonardo
135

Minunit es un marco de prueba de unidad increíblemente simple. Lo estoy usando para probar el código del microcontrolador c para avr.

Matteo Caprari
fuente
55
No tengo experiencia en hacer sistemas embebidos, así que no puedo comentar sobre eso, pero para pequeños programas en C (trabajo escolar, guiones) esto se ve perfecto. Gran enlace
AndrewKS
3
@toasted_flakes He convertido esto en una esencia de github
Sam
¡Esto está muy cerca de lo que se me ocurrió antes de comenzar a buscar aquí! Me gustaría automatizar las pruebas para que TEST (funcname, body) cree la función y almacene un puntero a la función, pero parece que necesitaré algún procesamiento externo.
Ben Kushigian
41

Actualmente estoy usando el marco de prueba de la unidad CuTest:

http://cutest.sourceforge.net/

Es ideal para sistemas integrados, ya que es muy ligero y simple. No tuve problemas para que funcione en la plataforma de destino, así como en el escritorio. Además de escribir las pruebas unitarias, todo lo que se requiere es:

  • un archivo de encabezado incluido donde quiera que llame a las rutinas CuTest
  • un solo archivo 'C' adicional para ser compilado / vinculado a la imagen
  • se agrega un código simple a main para configurar y llamar a las pruebas unitarias; solo tengo esto en una función main () especial que se compila si UNITTEST se define durante la compilación.

El sistema debe admitir un montón y alguna funcionalidad estándar (que no todos los sistemas integrados tienen). Pero el código es lo suficientemente simple como para que probablemente pueda trabajar en alternativas a esos requisitos si su plataforma no los tiene.

Con un uso juicioso de los bloques externos "C" {}, también admite probar C ++ perfectamente.

Michael Burr
fuente
1
Secundaré el voto para CuTest. Lo he estado usando para desarrollar homebrew en la Nintendo DS y no he tenido ninguna dificultad para configurarlo o usarlo.
Theran
Tercero esto. Lo descargué cuando era la versión 1.4 y lo modifiqué para volcarlo a XML. Parece que hay una versión 1.5 que tendré que descargar y mirar.
Taylor Price
2
CuTest me ha funcionado bien para probar el código que se ejecuta en un sistema QNX.
Jace Browning
Dice que funciona como JUnit, pero parece que extraño BeforeyAfter llama. En general, es lindo.
Dragas
40

Digo casi lo mismo que ratkok, pero si tienes un giro incrustado en las pruebas unitarias, entonces ...

Unidad : marco altamente recomendado para pruebas unitarias de código C.

Los ejemplos en el libro que se menciona en este hilo TDD para C incrustado se escriben usando Unity (y CppUTest).

Johan
fuente
55
La unidad combinada con la generación automatizada de simulacros usando CMock es bastante buena.
thegreendroid
¿Puedes sugerir algún buen tutorial para cmock?
melwin_jose
Hay un muy buen tutorial para CMock y Unity, orquestado por Ceedling: dmitryfrank.com/articles/unit_testing_embedded_c_applications
Dmitry Frank
35

También es posible que desee echar un vistazo a libtap , un marco de prueba C que genera el Protocolo Test Anything (TAP) y, por lo tanto, se integra bien con una variedad de herramientas que salen a la luz para esta tecnología. Se usa principalmente en el mundo del lenguaje dinámico, pero es fácil de usar y se está volviendo muy popular.

Un ejemplo:

#include <tap.h>

int main () {
    plan(5);

    ok(3 == 3);
    is("fnord", "eek", "two different strings not that way?");
    ok(3 <= 8732, "%d <= %d", 3, 8732);
    like("fnord", "f(yes|no)r*[a-f]$");
    cmp_ok(3, ">=", 10);

    done_testing();
}
lsmagalhaes
fuente
Enrollé a mano mi propio equivalente libtap para mis propios proyectos, pero ahora que sé que esto existe, ya no tendré que mantener el mío. ¡Frio!
Ephemient
1
ok(TESTING==IsSimple(), "libtap is super easy to use")
AShelly
26

Hay un marco de prueba de unidad elegante para C con soporte para objetos simulados llamado cmocka . Solo requiere la biblioteca C estándar, funciona en una variedad de plataformas informáticas (incluidas las integradas) y con diferentes compiladores.

También tiene soporte para diferentes formatos de salida de mensajes como Subunit, Test Anything Protocol e informes jUnit XML.

cmocka ha sido creado para funcionar también en plataformas integradas y también tiene soporte para Windows.

Una prueba simple se ve así:

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>

/* A test case that does nothing and succeeds. */
static void null_test_success(void **state) {
    (void) state; /* unused */
}

int main(void) {
    const struct CMUnitTest tests[] = {
        cmocka_unit_test(null_test_success),
    };
    return cmocka_run_group_tests(tests, NULL, NULL);
}

los API está completamente documentada y varios ejemplos son parte del código fuente.

Para comenzar con cmocka, debe leer el artículo en LWN.net: Pruebas unitarias con objetos simulados en C

cmocka 1.0 se lanzó en febrero de 2015.

asn
fuente
3
Cuando miro cmockery y cmocka, la documentación es similar. ¿Están relacionados estos proyectos?
Matt Friedman
66
cmocka es el sucesor de cmockery. Lo bifurqué porque no se mantiene.
asn
21

No llegué lejos probando una aplicación C heredada antes de comenzar a buscar una forma de simular funciones. Necesitaba mucho simulacros para aislar el archivo C que quiero probar de los demás. Intenté con cmock y creo que lo adoptaré.

Cmock escanea los archivos de encabezado y genera funciones simuladas basadas en los prototipos que encuentra. Los simulacros te permitirán probar un archivo C en perfecto aislamiento. Todo lo que tendrá que hacer es vincular su archivo de prueba con simulacros en lugar de sus archivos de objetos reales.

Otra ventaja de cmock es que validará los parámetros pasados ​​a las funciones simuladas, y le permitirá especificar qué valor de retorno deben proporcionar los simulacros. Esto es muy útil para probar diferentes flujos de ejecución en sus funciones.

Las pruebas consisten en las funciones típicas testA (), testB () en las que construye expectativas, llama a funciones para probar y verifica afirmaciones.

El último paso es generar un corredor para sus pruebas con unidad. Cmock está vinculado al marco de prueba de la unidad. La unidad es tan fácil de aprender como cualquier otro marco de prueba de unidad.

Vale la pena intentarlo y es bastante fácil de entender:

http://sourceforge.net/apps/trac/cmock/wiki

Actualización 1

Otro marco que estoy investigando es Cmockery.

http://code.google.com/p/cmockery/

Es un marco C puro que admite pruebas y burlas de unidades. No depende de ruby ​​(al contrario de Cmock) y tiene muy poca dependencia de libs externas.

Se requiere un poco más de trabajo manual para configurar simulacros porque no genera código. Eso no representa mucho trabajo para un proyecto existente ya que los prototipos no cambiarán mucho: una vez que tenga sus simulacros, no necesitará cambiarlos por un tiempo (este es mi caso). La escritura adicional proporciona un control completo de los simulacros. Si hay algo que no le gusta, simplemente cambie su simulación.

No es necesario un corredor de prueba especial. Solo necesita crear una matriz de pruebas y pasarla a una función run_tests. Un poco más de trabajo manual aquí también, pero definitivamente me gusta la idea de un marco autónomo autónomo.

Además, contiene algunos trucos ingeniosos de C que no conocía.

Cmockery en general necesita un poco más de comprensión de las simulaciones para comenzar. Los ejemplos deberían ayudarte a superar esto. Parece que puede hacer el trabajo con una mecánica más simple.

Philippe A.
fuente
8
¡Debes echar un vistazo a cmocka.org, que es el sucesor de cmockery!
asn
¿Puedes sugerir algún buen tutorial para cmock?
melwin_jose
Comience con el artículo LWN y luego verifique el directorio de ejemplo de cmocka.
asn
16

Como novato en C, encontré las diapositivas llamadas Desarrollo impulsado por pruebas en C muy útiles. Básicamente, utiliza el estándar assert()junto con &&para entregar un mensaje, sin ninguna dependencia externa. Si alguien está acostumbrado a un marco de prueba de pila completa, esto probablemente no funcionará :)

chelmertz
fuente
Me molestó mucho el error en la función is_spare () ... ¡pero gracias por el enlace! Supongo que TDD no detecta TODOS los errores.
Jis Ben
Este es el enfoque TDD más simple que he visto para C, que puede seguir assertsin necesidad de bibliotecas o marcos adicionales. Creo que si eres un novato, este podría ser un punto de partida.
kabirbaidhya
16

Escribimos CHEAT (alojado en GitHub ) para facilitar su uso y portabilidad.

No tiene dependencias y no requiere instalación o configuración. Solo se necesita un archivo de encabezado y un caso de prueba.

#include <cheat.h>

CHEAT_TEST(mathematics_still_work,
    cheat_assert(2 + 2 == 4);
    cheat_assert_not(2 + 2 == 5);
)

Las pruebas se compilan en un ejecutable que se encarga de ejecutar las pruebas e informar sus resultados.

$ gcc -I . tests.c
$ ./a.out
..
---
2 successful of 2 run
SUCCESS

Tiene bonitos colores también.

Tuplanolla
fuente
Voto a favor de la bella colo (u) rs
Mawg dice que reinstale a Monica el
12

Hay CUnit

Y Embedded Unit es un marco de prueba de unidad para Embedded C System. Su diseño se copió de JUnit y CUnit y más, y luego se adaptó un poco para Embedded C System. Embedded Unit no requiere std C libs. Todos los objetos se asignan al área constante.

Y Tessy automatiza las pruebas unitarias de software embebido.

prakash
fuente
1
Lo intenté embunity me decepcionó.
Craig McQueen
1
Por ejemplo, vea un informe de error que envié, así como otro informe de error que no se ha activado durante 3 años.
Craig McQueen
12

No uso un marco, solo uso el soporte de objetivo "check" de herramientas automáticas. Implemente un "principal" y use aserción (es).

Mi directorio de prueba Makefile.am (s) se ve así:

check_PROGRAMS = test_oe_amqp

test_oe_amqp_SOURCES = test_oe_amqp.c
test_oe_amqp_LDADD = -L$(top_builddir)/components/common -loecommon
test_oe_amqp_CFLAGS = -I$(top_srcdir)/components/common -static

TESTS = test_oe_amqp
navicore
fuente
2
No estamos usando autotools (aunque sería bueno moverse en algún momento). Históricamente, he utilizado el método principal para fines de prueba y no es una mala solución.
Paul Osborne
11

El libro de Michael Feather "Trabajando eficazmente con código heredado" presenta muchas técnicas específicas para las pruebas unitarias durante el desarrollo de C.

Existen técnicas relacionadas con la inyección de dependencia que son específicas de C y que no he visto en ningún otro lado.

Anuj Gupta
fuente
7

CppUTest : marco altamente recomendado para pruebas unitarias de código C.

Los ejemplos en el libro que se menciona en este hilo TDD para C incrustado se escriben usando CppUTest.

Ratkok
fuente
6

Utilizo CxxTest para un entorno c / c ++ incrustado (principalmente C ++).

Prefiero CxxTest porque tiene un script perl / python para construir el corredor de prueba. Después de una pequeña pendiente para configurarlo (aún más pequeño ya que no tiene que escribir el corredor de prueba), es bastante fácil de usar (incluye muestras y documentación útil). La mayor parte del trabajo consistía en configurar el 'hardware' al que accede el código para poder realizar pruebas de unidad / módulo de manera efectiva. Después de eso, es fácil agregar nuevos casos de prueba unitaria.

Como se mencionó anteriormente, es un marco de prueba de unidad C / C ++. Por lo tanto, necesitará un compilador de C ++.

Guía del usuario de CxxTest Wiki de CxxTest

Zing-
fuente
El compilador que necesita puede c ++ pero el código que está probando todavía puede ser C. CxxTest es un marco muy fácil de usar
David Sykes
5

Después de leer Minunit, pensé que una mejor manera era basar la prueba en una macro de afirmación que utilizo mucho como una técnica de programa defensivo. Entonces utilicé la misma idea de Minunit mezclado con la afirmación estándar. Puedes ver mi marco (un buen nombre podría ser NoMinunit) en el blog de k0ga

Roberto Vargas Caballero
fuente
Ahora estoy usando tu utest.h en mi proyecto. Funciona bien y es lo suficientemente útil. ¡Gracias!
Johan
4

Google tiene un excelente marco de prueba. https://github.com/google/googletest/blob/master/googletest/docs/primer.md

Y sí, por lo que veo, funcionará con C simple, es decir, no requiere características de C ++ (puede requerir un compilador de C ++, no estoy seguro).

Paweł Hajdan
fuente
¿El marco de trabajo de google funcionará con C puro? Un vistazo rápido a la página sugiere que es un marco de trabajo de C ++.
Dana
44
Google Test es excelente, pero es en gran medida un marco de trabajo de C ++. Es bastante portátil y puede usarse para probar C si fuera necesario.
Josh Kelley
4

Cmockery es un proyecto lanzado recientemente que consiste en una biblioteca C muy simple de usar para escribir pruebas unitarias.

Alejandro Bologna
fuente
Debería echar un vistazo a cmocka.org, que es el sucesor de Cmockery.
asn
3

Primero, mira aquí: http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C

Mi empresa tiene una biblioteca C que usan nuestros clientes. Utilizamos CxxTest (una biblioteca de prueba de unidad C ++) para probar el código. CppUnit también funcionará. Si está atascado en C, recomendaría RCUNIT (pero CUnit también es bueno).

Kevin
fuente
2

Si está familiarizado con JUnit, le recomiendo CppUnit. http://cppunit.sourceforge.net/cppunit-wiki

Eso supone que tiene un compilador de c ++ para hacer las pruebas unitarias. si no, tengo que estar de acuerdo con Adam Rosenfield en que ese cheque es lo que quieres.

Kwondri
fuente
66
La pregunta es sobre C, no C ++
1800 INFORMACIÓN
3
No, pero C ++ puede interactuar con las bibliotecas de C. Por lo tanto, puede estar perfectamente bien probar las bibliotecas C usando un marco de prueba de unidad C ++. (Por cierto, mi empresa hace eso y es mucho más fácil que usar marcos de prueba de unidad C)
Kevin
Hago lo mismo. Tenemos una biblioteca de utilidades escrita en C que usamos debajo de nuestro código C ++ y lenguajes de script. Usamos CppUnit para las pruebas y está funcionando bastante bien, ya que podemos usar el mismo marco para C y C ++.
Jyaan
2

Utilicé RCUNIT para hacer algunas pruebas unitarias para el código incrustado en la PC antes de probar en el objetivo. La buena abstracción de la interfaz de hardware es importante; de ​​lo contrario, la endianidad y los registros mapeados en memoria lo matarán.

Gerhard
fuente
2

prueba lcut! - http://code.google.com/p/lcut

Tony Bai
fuente
3
Alguna documentación sería útil. Los antecedentes y objetivos del proyecto, una lista de características, ventajas sobre las alternativas existentes, etc. serían útiles para las personas que lo están revisando por primera vez.
Craig McQueen
2

API Sanity Checker : marco de prueba para bibliotecas C / C ++:

Un generador automático de pruebas unitarias básicas para una biblioteca C / C ++ compartida. Es capaz de generar datos de entrada razonables (en la mayoría de los casos, pero desafortunadamente no todos) para parámetros y componer casos de prueba simples ("sanidad" o "poca profundidad") para cada función en la API a través del análisis de declaraciones en el encabezado archivos.

La calidad de las pruebas generadas permite verificar la ausencia de errores críticos en casos de uso simples. La herramienta es capaz de construir y ejecutar pruebas generadas y detectar fallas (segfaults), abortos, todo tipo de señales emitidas, código de retorno de programa distinto de cero y bloqueo de programa.

Ejemplos:

revs aponomarenko
fuente
1

Una técnica para usar es desarrollar el código de prueba de la unidad con un marco de trabajo de C ++ xUnit (y compilador de C ++), mientras se mantiene la fuente para el sistema de destino como módulos de C.

Asegúrese de compilar regularmente su fuente C bajo su compilador cruzado, automáticamente con sus pruebas unitarias si es posible.

quamrana
fuente
1

LibU ( http://koanlogic.com/libu ) tiene un módulo de prueba unitaria que permite dependencias explícitas de conjuntos de pruebas / casos, aislamiento de pruebas, ejecución paralela y un formateador de informes personalizable (los formatos predeterminados son xml y txt).

La biblioteca tiene licencia BSD y contiene muchos otros módulos útiles: redes, depuración, estructuras de datos de uso común, configuración, etc., en caso de que los necesite en sus proyectos ...

bongo
fuente
1

Me sorprende que nadie haya mencionado Cutter (http://cutter.sourceforge.net/) . Puede probar C y C ++, se integra a la perfección con las herramientas automáticas y tiene un tutorial realmente agradable disponible.

Kris
fuente
0

En caso de que esté apuntando a plataformas Win32 o al modo de kernel NT, debe echar un vistazo a cfix .

Johannes pasando
fuente
0

Si todavía está buscando marcos de prueba, CUnitWin32 es uno para la plataforma Win32 / NT.

Esto resuelve un problema fundamental que enfrenté con otros marcos de prueba. Es decir, las variables globales / estáticas se encuentran en un estado determinista porque cada prueba se ejecuta como un proceso separado.

Dushara
fuente