Ответ 1
Я работал с Check и его очень легко настроить. Его используют некоторые крупные активные проекты, такие как GStreamer. Вот простой пример отказа, если строка:
fail_if (0 == get_element_position(spot), "Position should not be 0");
Есть ли какая-либо модульная система тестирования для C, например JUnit и Nunit для java и .NET? Или как мы тестируем фрагмент кода, написанный на C для разных сценариев?
Спасибо заранее...
Я работал с Check и его очень легко настроить. Его используют некоторые крупные активные проекты, такие как GStreamer. Вот простой пример отказа, если строка:
fail_if (0 == get_element_position(spot), "Position should not be 0");
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;
}
Существует также 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
}
В Glib есть встроенная структура тестирования: http://library.gnome.org/devel/glib/stable/glib-Testing.html
Я все еще новичок в модульных модульных модулях, но недавно я попробовал cut, check и cunit. Это, похоже, противоречило опыту других людей (см. Unit Testing C Code для предыдущего вопроса), но я нашел, что cunit легче всего подходит. Это также кажется хорошим выбором для меня, поскольку cunit должен хорошо сочетаться с другими инфраструктурами xunit, и я часто меняю языки.
Я был очень доволен 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"));
}
Ну, просто замените J из Java на C из... C
Хотя возможно CUT является более общим.
Наконец, я мог бы быть использован, потому что мне очень нравится NetBSD, но вы также должны дать ATF попробовать