2010-04-30 12 views
14

Czy istnieje struktura testów jednostkowych dla C, takich jak JUnit i Nunit dla java i .NET? Albo jak przetestować kod napisany w C dla różnych scenariuszy?framework do testowania jednostkowego dla C

góry dzięki ......

+4

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

+2

+1 do komentarza bdhar użytkownika. Jeśli masz problemy z wyszukiwaniem SO/Google, to testy jednostkowe są najmniejsze z twoich zmartwień :-) – richsage

+0

Co najmniej dwa duplikaty w tych linkach ... – dmckee

Odpowiedz

5

Pracowałem niektóre z Check i jego bardzo łatwy w konfiguracji. Jest używany przez niektóre duże aktywne projekty, takie jak GStreamer. Oto prosty przykład niepowodzenia, jeśli linia:

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

Cóż, po prostu zastąpić J z Java przez C z ... C

Cunit

Althought może CUT jest bardziej ogólne.

Wreszcie mogę być byased bo naprawdę jak NetBSD, ale należy również podać ATF spróbować

1

wciąż jestem nowy w ramach testów jednostkowych , ale ostatnio wypróbowałem: cut, check i cunit. To wydawało się przeciwdziałać doświadczeniom innych (zobacz Unit Testing C Code dla poprzedniego pytania), ale znalazłem cunit najłatwiejszy do wykonania. Wydaje mi się to również dobrym wyborem, ponieważ cunit ma się dobrze dopasować do innych frameworków xunit i często przełączam języki.

1

Byłem bardzo szczęśliwy z CuTest ostatnim razem, gdy potrzebowałem testu jednostkowego C. Jest to tylko jedna para .c/.h, jest dostarczany z małym skryptem powłoki, który automatycznie znajduje wszystkie testy do zbudowania zestawu testów i asercji Błędy nie są całkowicie nieprzydatne.

Oto przykład jednego z moich testów:

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 to ta, którą napisałem dla siebie i która jest otwarta. Celem jest być prostym i mieć czystą składnię.

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

rodzaj podstawowego prosty test byłby ...

#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

Istnieje również cspec, który jest bardzo prosty i łatwy w użyciu BDD ram.

Jeśli kiedykolwiek używane coś jak rspec lub mokka będzie to banalne w użyciu. Nie wymaga nawet pisania funkcji main.

Oto przykład:

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 

} 
Powiązane problemy