2010-04-30 4 views
14

Есть ли какой-либо модульный модуль тестирования для C, например, JUnit и Nunit для java и .NET? Или как мы тестируем фрагмент кода, написанный на C для разных сценариев?единый модуль тестирования для C

Заранее спасибо ......

+4

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

+2

+1 к комментарию bdhar в. Если у вас возникли проблемы с поиском SO/Google, то модульные тесты - это наименьшее из ваших забот :-) – richsage

+0

Как минимум два дубликата прямо в соответствующих ссылках ... – dmckee

ответ

5

Я работал с некоторыми Check и его очень легко настроить. Его используют некоторые крупные активные проекты, такие как GStreamer. Вот простой пример отказа, если строка:

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

Ну, просто замените J от Java на C от ... C

Cunit

Althought возможно CUT является более общим.

Наконец-то я мог бы быть byased, потому что я на самом деле, как NetBSD, но вы должны также дать ATF попробовать

1

Я еще новичок в единичных рамках тестирования , но я недавно попробовал cut, check и cunit. Это, похоже, противоречило опыту других людей (см. Unit Testing C Code для предыдущего вопроса), но я нашел, что cunit легче всего начать. Это также кажется хорошим выбором для меня, так как cunit должен хорошо сочетаться с другими структурами xunit, и я часто меняю языки.

1

Я был очень доволен CuTest в последний раз, когда мне нужно было выполнить единицу теста C. Это только одна .c/.h пара, поставляется с небольшим сценарием оболочки, который автоматически находит все тесты для сборки набора тестов и утверждения ошибки не совсем бесполезны.

Вот пример одного из моих тестов:

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 - это тот, который я написал для себя и открывал. Цель должна быть простой и иметь чистый синтаксис.

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

своего рода основного простого тест будет ...

#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

Существует также cspec, который является очень простым и легким в использовании рамки BDD.

Если вы когда-либо использовали что-то вроде RSpec или мокко это будет тривиально использовать. Это даже не требует, чтобы вы написали функцию main.

Вот пример:

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 

} 
Смежные вопросы