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 ......
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 ......
Glib ma wbudowane testowania ram: http://library.gnome.org/devel/glib/stable/glib-Testing.html
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.
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"));
}
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;
}
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
}
http://www.google.com/search?q=unit+testing+c – bdhar
+1 do komentarza bdhar użytkownika. Jeśli masz problemy z wyszukiwaniem SO/Google, to testy jednostkowe są najmniejsze z twoich zmartwień :-) – richsage
Co najmniej dwa duplikaty w tych linkach ... – dmckee