2010-04-30 9 views
14

¿Existe algún marco de pruebas unitarias 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?marco de pruebas unitarias para C

Gracias de antemano ......

+4

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

+2

1 al comentario de bdhar. Si tiene problemas para buscar SO/Google, las pruebas unitarias son la menor de sus preocupaciones :-) – richsage

+0

Al menos dos duplicados a la derecha en los enlaces relacionados ... – dmckee

Respuesta

5

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

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

Bueno, basta con sustituir el J de Java por un C de C ...

Cunit

Althought quizá CUT es más genérico.

último puede ser que sea byased porque me gusta mucho NetBSD, pero también se debe dar una oportunidad ATF

1

todavía soy nuevo en frameworks de pruebas unitarias , pero recientemente probé cut, check y cunit. Esto pareció contrarrestar las experiencias de otros (ver Unit Testing C Code para una pregunta anterior), pero encontré cunit la más fácil de poner en marcha. Esto también parece una buena opción para mí, ya que se supone que cunit se alinea bien con los otros marcos de xunit y cambio los idiomas con bastante frecuencia.

1

Estuve muy contento con CuTest la última vez que necesité probar la unidad C. Se trata de un solo 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 la afirmación los errores no son del todo inútiles.

Aquí es 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")); 
} 
2

Seatest es la que escribí para mí y de código abierto. El objetivo es ser simple y tener una sintaxis limpia.

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

una especie 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; 
} 
2

Existe también cspec, que es una muy simple y fácil de usar marco de BDD.

Si ha usado alguna vez algo así como rspec o moka será un uso trivial. Ni siquiera requiere que escriba una función main.

Aquí se muestra 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 

}