Marco de pruebas unitarias para C

¿Hay algún marco de prueba de unidad para C como JUnit y Nunit para java y .NET? ¿O cómo probamos un fragmento de código escrito en C para diferentes escenarios?

Gracias por adelantado……

He trabajado un poco con Check y es muy fácil de configurar. Es utilizado por algunos grandes proyectos activos como GStreamer . Aquí hay un ejemplo simple de falla si la línea:

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

Glib tiene un marco de prueba incorporado: http://library.gnome.org/devel/glib/stable/glib-Testing.html

Seatest es el que escribí para mí mismo y de código abierto. El objective es ser simple y tener una syntax limpia.

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

Un tipo de prueba simple básica sería …

 #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; } 

También hay cspec , que es un marco BDD muy simple y fácil de usar.

Si alguna vez has usado algo como rspec o mocha , será trivial de usar. Ni siquiera requiere que escribas una función main .

Aquí hay un ejemplo:

 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 } 

Todavía soy nuevo en los marcos de prueba de unidad, pero recientemente he intentado cortar , verificar y cunit . Esto pareció contradecir las experiencias de otros (vea el Código de C de Unit Testing para una pregunta anterior), pero encontré que cunit es lo más fácil de poner en marcha. Esto también me parece una buena opción, ya que se supone que cunit se alinea bien con los otros marcos de trabajo de xunit y cambio los idiomas con cierta frecuencia.

Estuve muy contento con CuTest la última vez que necesité la prueba de unidad C. Es solo un par .c / .h, viene con un pequeño script de shell que encuentra automáticamente todas las pruebas para construir el conjunto de pruebas y los errores de afirmación no son totalmente inútil.

Aquí hay un ejemplo de una de mis pruebas:

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

Bueno, solo reemplaza la J de Java por una C de … C

Cunit

Aunque quizás CUT sea ​​más genérico.

Finalmente, me pueden pasar por alto porque realmente me gusta NetBSD, pero también deberías probar ATF