c unity - Codice C Test unitario




15 Answers

Un framework di test unitario in C è Check ; una lista di quadri di test unitari in C può essere trovata here ed è riprodotta di seguito. A seconda del numero di funzioni di libreria standard del runtime, è possibile o meno essere in grado di utilizzarne una.

AceUnit

AceUnit (Advanced C e Embedded Unit) si autodefinisce come un comodo framework per test di codice C. Cerca di imitare JUnit 4.x e include capacità di riflessione. AceUnit può essere utilizzato in ambienti con vincoli di risorse, ad esempio lo sviluppo di software embedded e, soprattutto, funziona bene in ambienti in cui non è possibile includere un singolo file di intestazione standard e non può richiamare una singola funzione C standard dalle librerie ANSI / ISO C. Ha anche una porta di Windows. Non usa le forcelle per intrappolare i segnali, anche se gli autori hanno espresso interesse ad aggiungere una funzione del genere. Vedi la homepage di AceUnit .

Autounità GNU

Molto simile a Check, compreso il biforcarsi per eseguire i test unitari in uno spazio indirizzo separato (in effetti, l'autore originale di Check ha preso in prestito l'idea da GNU Autounit). GNU Autounit usa GLib estensivamente, il che significa che il collegamento e tale necessità richiedono opzioni speciali, ma questo potrebbe non essere un grosso problema per te, specialmente se stai già utilizzando GTK o GLib. Vedi la homepage di GNU Autounit .

cunit

Utilizza anche GLib, ma non si biforca per proteggere lo spazio degli indirizzi dei test unitari.

CUnit

Standard C, con piani per un'implementazione della GUI Win32. Al momento non esegue il fork o protegge in altro modo lo spazio degli indirizzi dei test unitari. Nel primo sviluppo. Vedi la homepage di CUnit .

Cutest

Un semplice framework con un solo file .c e un file .h da inserire nell'albero dei sorgenti. Vedi la homepage di CuTest .

CppUnit

Il principale framework di test unitario per C ++; puoi anche usarlo per testare il codice C. È stabile, attivamente sviluppato e ha un'interfaccia GUI. I motivi principali per non usare CppUnit per C sono innanzitutto che è abbastanza grande, e in secondo luogo devi scrivere i tuoi test in C ++, il che significa che hai bisogno di un compilatore C ++. Se questi non sembrano preoccupanti, vale la pena considerare, insieme ad altri framework di test delle unità C ++. Vedi la homepage di CppUnit .

embUnit

embUnit (Embedded Unit) è un'altra unità di test framework per sistemi embedded. Questo sembra essere sostituito da AceUnit. Homepage di Embedded Unit .

MinUnit

Un set minimo di macro e il gioco è fatto! Il punto è mostrare quanto è facile testare il codice dell'unità. Vedi la homepage di MinUnit .

CUnit per Mr. Ando

Un'implementazione di CUnit che è abbastanza nuova e apparentemente ancora in fase di sviluppo iniziale. Vedi la pagina principale di CUnit per Mr. Ando .

Questo elenco è stato aggiornato l'ultima volta nel marzo 2008.

Altri:

CMocka

CMocka è un framework di test per C con supporto per oggetti finti. È facile da usare e configurare. cmocka.org homepage ufficiale.

Criterio

Il criterio è un framework di test delle unità C multipiattaforma che supporta la registrazione automatica dei test, i test parametrizzati, le teorie e che può essere esportato in più formati, tra cui TAP e JUnit XML. Ogni test viene eseguito nel proprio processo, quindi segnali e arresti anomali possono essere segnalati o testati, se necessario. Vedere la pagina iniziale del criterio per ulteriori informazioni.

HWUT

HWUT è uno strumento di unit test generale con un grande supporto per C. Può aiutare a creare Makefile, generare enormi casi di test codificati in "tabelle di iterazione" minime, camminare su macchine a stati, generare C-stub e altro. L'approccio generale è piuttosto unico: i verdetti si basano sul "buon stdout / cattivo stdout". La funzione di confronto, tuttavia, è flessibile. Pertanto, qualsiasi tipo di script può essere utilizzato per il controllo. Può essere applicato a qualsiasi linguaggio in grado di produrre output standard. Vedi la homepage di HWUT .

Wikipedia fornisce un elenco dettagliato dei framework di test dell'unità C sotto Elenco dei framework di test unitari: C

testing ignore

Ho lavorato su un sistema embedded questa estate scritto in modo diretto C. Era un progetto esistente che la società per cui lavoravo aveva rilevato. Mi sono abbastanza abituato a scrivere unit test in Java usando JUnit, ma ero in perdita per quanto riguarda il modo migliore per scrivere test unitari per il codice esistente (che richiedeva il refactoring) così come il nuovo codice aggiunto al sistema.

Esiste un modo per rendere il test del codice C semplice come un'unità testando il codice Java con, ad esempio, JUnit ? Qualsiasi intuizione che si applichi specificamente allo sviluppo integrato (cross-compiling alla piattaforma arm-linux) sarebbe molto apprezzata.




Minunit è un framework di test unitario incredibilmente semplice. Lo sto usando per il codice microcontroller test unit c per avr.




Dico quasi la stessa cosa di ratkok, ma se hai una svolta nei test unitari allora ...

Unity : framework altamente raccomandato per il test del codice C dell'unità.

Gli esempi nel libro menzionato in questo thread TDD per C incorporato sono scritti usando Unity (e CppUTest).




C'è un elegante framework di test unitario per C con supporto per oggetti finti chiamati cmocka . Richiede solo la libreria C standard, funziona su una gamma di piattaforme di elaborazione (incluso embedded) e con diversi compilatori.

Ha anche il supporto per diversi formati di output dei messaggi come Subunit, Test Anything Protocol e jUnit XML reports.

cmocka è stato creato per funzionare anche su piattaforme embedded e ha anche il supporto di Windows.

Un semplice test assomiglia a questo:

#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);
}

L' API è completamente documentata e diversi esempi fanno parte del codice sorgente.

Per iniziare con cmocka dovresti leggere l'articolo su LWN.net: Test delle unità con oggetti mock in C

cmocka 1.0 è stato rilasciato a febbraio 2015.




Come novellino di C, ho trovato molto utili le diapositive denominate Test driven development in C. Fondamentalmente, usa lo standard assert() insieme a && per consegnare un messaggio, senza alcuna dipendenza esterna. Se qualcuno è abituato a un framework di testing completo, questo probabilmente non lo farà :)




Abbiamo scritto CHEAT (ospitato su GitHub ) per facilità d'uso e portabilità.

Non ha dipendenze e non richiede installazione o configurazione. Sono necessari solo un file di intestazione e un test case.

#include <cheat.h>

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

I test vengono compilati in un eseguibile che si occupa di eseguire i test e riportare i risultati.

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

Ha anche dei bei colori.




Il libro di Michael Feather "Lavorare efficacemente con il codice legacy" presenta molte tecniche specifiche per i test unitari durante lo sviluppo di C.

Esistono tecniche correlate all'iniezione di dipendenza specifiche per C che non ho visto da nessun'altra parte.




Io uso CxxTest per un ambiente c / c ++ incorporato (principalmente C ++).

Preferisco CxxTest perché ha uno script perl / python per creare il runner di test. Dopo una piccola pendenza per farlo configurare (ancora più piccolo dato che non è necessario scrivere il runner di prova), è piuttosto facile da usare (include esempi e documentazione utile). La maggior parte del lavoro consisteva nell'impostare l '"hardware" al quale il codice accede, così che potevo testare efficacemente il modulo / modulo. Dopodiché è facile aggiungere nuovi casi di test unitari.

Come accennato in precedenza, è un framework di test di unità C / C ++. Quindi avrai bisogno di un compilatore C ++.

CxxTest Guida utente CxxTest Wiki




Dopo aver letto Minunit ho pensato che un modo migliore era basare il test in macro assert che uso molto come tecnica del programma difensivo. Quindi ho usato la stessa idea di Minunit mista a quella standard. Puoi vedere il mio framework (un buon nome potrebbe essere NoMinunit) nel blog di k0ga







Per prima cosa, guarda qui: http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C

La mia azienda ha una libreria C utilizzata dai nostri clienti. Usiamo CxxTest (una libreria di test di unità C ++) per testare il codice. CppUnit funzionerà anche. Se sei bloccato in C, ti consiglio RCUNIT (ma anche CUnit è buono).




Ho usato RCUNIT per fare alcuni test unitari per codice incorporato su PC prima di testare il target. Una buona astrazione dell'interfaccia hardware è importante, altrimenti i registri mappati in memoria ti uccideranno.




API Sanity Checker - framework di test per librerie C / C ++:

Un generatore automatico di test unitari di base per una libreria C / C ++ condivisa. È in grado di generare dati di input ragionevoli (nella maggior parte, ma purtroppo non tutti) per i parametri e di compilare semplici casi di test ("sanity" o "shallow") per ogni funzione nell'API attraverso l'analisi delle dichiarazioni nell'intestazione File.

La qualità dei test generati consente di verificare l'assenza di errori critici in casi d'uso semplici. Lo strumento è in grado di costruire ed eseguire test generati e rilevare arresti anomali (segfault), aborti, tutti i tipi di segnali emessi, codice di ritorno del programma diverso da zero e sospensione del programma.

Esempi:




LibU ( http://koanlogic.com/libu ) ha un modulo di test unitario che consente esplicite dipendenze di casi / suite di test, isolamento del test, esecuzione parallela e un formattatore di report personalizzabile (i formati predefiniti sono xml e txt).

La libreria è dotata di licenza BSD e contiene molti altri moduli utili: reti, debug, strutture dati comunemente utilizzate, configurazione, ecc., Se ne hai bisogno nei tuoi progetti ...




Nel caso tu stia bersagliando piattaforme Win32 o modalità kernel NT, dovresti dare un'occhiata a cfix .




Related

c unit-testing testing embedded