Модульная система тестирования для C

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

Спасибо заранее...

Ответы

Ответ 1

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

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

Ответ 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;
}

Ответ 3

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

Если вы когда-либо использовали что-то вроде rspec или mocha, это будет тривиально использовать. Вам даже не требуется писать функцию 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

}

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

Cunit

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

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