2010-04-30 22 views
14

Esiste un framework di test unitario per C come JUnit e Nunit per java e .NET? O come testiamo un pezzo di codice scritto in C per diversi scenari?framework di test unità per C

Grazie in anticipo ......

+4

http://www.google.com/search?q=unit+testing+c – bdhar

+2

+1 al commento di bdhar. Se hai problemi a cercare SO/Google, i test unitari sono l'ultima delle tue preoccupazioni :-) – richsage

+0

Almeno due duplicati proprio nei collegamenti correlati ... – dmckee

risposta

5

ho lavorato un po 'con la Check ed è molto facile da installare. È utilizzato da alcuni grandi progetti attivi come GStreamer. Ecco un semplice esempio di errore se linea:

fail_if (0 == get_element_position(spot), "Position should not be 0"); 
0

Beh, basta sostituire il J da Java da un C da C ...

Cunit

Althought forse CUT è più generico.

Infine potrei essere byased perché mi piace molto NetBSD, ma si dovrebbe anche dare una prova ATF

1

Sono ancora nuovo framework di test di unità , ma recentemente ho provato cut, check e cunit. Questo sembrava contrastare le esperienze di altri (vedi Unit Testing C Code per una domanda precedente), ma ho trovato cunit il più facile da usare. Anche questa sembra una buona scelta per me, dato che si suppone che cunit si allinei bene con gli altri framework xunit e io cambierò le lingue un po 'di frequente.

1

Sono stato molto contento di CuTest l'ultima volta che ho avuto bisogno del test dell'unità C. È solo una coppia .c/.h, con un piccolo script di shell che trova automaticamente tutti i test per creare la suite di test e l'asserzione gli errori non sono del tutto inutili.

Ecco un esempio di uno dei miei test:

void TestBadPaths(CuTest *tc) { 
    // Directory doesn't exist 
    char *path = (char *)"/foo/bar"; 
    CuAssertPtrEquals(tc, NULL, searchpath(path, "sh")); 

    // A binary which isn't found 
    path = (char *)"/bin"; 
    CuAssertPtrEquals(tc, NULL, searchpath(path, "foobar")); 
} 
2

Seatest è quello che ho scritto per me stesso e open source. L'obiettivo è essere semplici e avere una sintassi pulita.

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

una sorta di test di base semplice sarebbe ...

#include "seatest.h" 
// 
// create a test... 
// 
void test_hello_world() 
{ 
    char *s = "hello world!"; 
    assert_string_equal("hello world!", s); 
    assert_string_contains("hello", s); 
    assert_string_doesnt_contain("goodbye", s); 
    assert_string_ends_with("!", s); 
    assert_string_starts_with("hell", s); 
} 

// 
// put the test into a fixture... 
// 
void test_fixture_hello(void) 
{ 
    test_fixture_start();  
    run_test(test_hello_world); 
    test_fixture_end();  
} 

// 
// put the fixture into a suite... 
// 
void all_tests(void) 
{ 
    test_fixture_hello(); 
} 

// 
// run the suite! 
// 
int main(int argc, char** argv) 
{ 
    run_tests(all_tests); 
    return 0; 
} 
2

C'è anche cspec, che è molto semplice e facile da usare framework BDD.

Se avete mai usato qualcosa come rspec o moka sarà banale da usare. Non richiede nemmeno di scrivere una funzione main.

Ecco un esempio:

context (example) { 

    describe("Hello world") { 

     it("true should be true") { 
      should_bool(true) be equal to(true); 
     } end 

     it("true shouldn't be false") { 
      should_bool(true) not be equal to(false); 
     } end 

     it("this test will fail because 10 is not equal to 11") { 
      should_int(10) be equal to(11); 
     } end 

     skip("this test will fail because \"Hello\" is not \"Bye\"") { 
      should_string("Hello") be equal to("Bye"); 
     } end 

    } end 

}