he leído
Marco de pruebas unitarias de C++
que se cierra por demasiado amplio; y en cuanto a las respuestas, si bien enumera varios marcos de prueba, en realidad no los compara ni analiza sus características.
Ahora, estoy interesado en agregar un marco para pruebas unitarias para un proyecto mío existente. En realidad, ya incluye un binario que realiza un cierto tipo de pruebas unitarias, o tal vez debería algo entre las pruebas unitarias y de subsistema, pero no es un marco de prueba unitaria en sí mismo y no pretende probar todo el código. Es por eso que quiero un marco adecuado. Puede (o no) también permitirme soltar parte del código personalizado que tengo ahora.
Un requisito importante que tengo es que el marco esté orientado a Modern-C++ . Es decir, que la sintaxis para usarlo será C++11'ish (podría ser C++14 o C++17, pero la última opción podría causarme algunos problemas debido a problemas de compatibilidad con CUDA), en lugar de solo admitir la prueba del código C ++ 11 como una ocurrencia tardía. Así que cuando leo, por ejemplo, que Google Test solo necesita un compilador C++98, me preocupo.
Otras características clave (parcialmente adaptadas de este artículo ):
y por supuesto:
Realmente me gustaría una comparación de fortalezas y debilidades con las características que enumeré, así como una comparación en un solo marco.
Si tiene Boost como dependencia, entonces Boost.Test es una opción obvia. Consistente, con todas las funciones, tan minimalista o tan rico como lo necesite.
¡Un framework C++14 y superior!
Ejemplo:
suite<> basic("a basic suite", [](auto &_) {
_.test("a test", []() {
expect(true, equal_to(true));
});
for(int i = 0; i < 4; i++) {
_.test("test number " + std::to_string(i), [i]() {
expect(i % 2, less(2));
});
}
subsuite<>(_, "a subsuite", [](auto &_) {
_.test("a sub-test", []() {
expect(true, equal_to(true));
});
});
});
Nota: no lo he probado yo mismo.
Ejemplo:
const lest::test specification[] =
{
CASE( "Empty string has length zero (succeed)" )
{
EXPECT( 0 == string( ).length() );
EXPECT( 0 == string("").length() );
},
}
Nota: no lo he probado yo mismo.
"Una prueba unitaria amigable para los humanos para C++ 11"
Aparentemente, este marco "hace lo imposible" para hacer que el código fuente de su prueba se lea como una descripción en lenguaje natural de una prueba. Por ejemplo, aquí hay una prueba de una guitarra, que asegura que suene distorsionada en el modo de distorsión:
describe("in distorted mode", [&]() {
before_each([&]() { fuzzbox->flip(); });
it("sounds distorted", [&]() {
AssertThat(guitar->sound(), Equals(sounds::distorted));
});
});
Nota: No he probado este yo mismo.
Presentado en CppCon 2017 por Victor Kirilov
Este marco desarrollado activamente no está realmente orientado a C++ moderno, pero pretende estar en su próxima versión principal (2.0; está en 1.2 en este momento).
Nota: No he probado esto yo mismo.
Mawg dice que reincorpore a Monica
einpoklum
Mawg dice que reincorpore a Monica