Ich habe gelesen
die als zu breit geschlossen ist; und was die Antworten betrifft, werden zwar mehrere Test-Frameworks aufgelistet, aber sie nicht wirklich verglichen oder ihre Funktionen diskutiert.
Jetzt bin ich daran interessiert, ein Framework für Komponententests für ein bestehendes Projekt von mir hinzuzufügen. Es enthält tatsächlich bereits eine Binärdatei, die eine bestimmte Art von Unit-Tests durchführt, oder vielleicht sollte ich etwas zwischen Unit- und Subsystem-Tests tun - aber es ist kein Unit-Testing-Framework an sich und nicht dazu gedacht, den gesamten Code zu testen. Deshalb möchte ich einen angemessenen Rahmen. Es kann mir auch erlauben (oder auch nicht), einen Teil des benutzerdefinierten Codes zu löschen, den ich gerade habe.
Eine wichtige Anforderung, die ich habe, ist, dass das Framework Modern-C++-orientiert ist . Das heißt, dass die Syntax für die Verwendung C++ 11-artig sein wird (könnte C++ 14 oder C++ 17 sein, aber die letztere Option könnte mir aufgrund von CUDA-Kompatibilitätsproblemen einige Probleme bereiten), anstatt nur zu unterstützen das Testen von C++11-Code im Nachhinein. Wenn ich also zum Beispiel lese, dass Google Test nur einen C++98-Compiler benötigt, mache ich mir Sorgen.
Weitere Schlüsselfunktionen (teilweise angepasst aus diesem Artikel ):
und natürlich:
Ich hätte wirklich gerne einen Vergleich der Stärken und Schwächen der von mir aufgelisteten Funktionen sowie einen Vergleich zu einem einzelnen Framework.
Wenn Sie Boost als Abhängigkeit haben, dann ist Boost.Test eine einfache Wahl. Konsistent, mit allen Funktionen, so minimalistisch oder so reichhaltig, wie Sie es brauchen.
Ein C++14-und-up-Framework!
Beispiel:
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));
});
});
});
Hinweis: Ich habe es nicht selbst ausprobiert.
Beispiel:
const lest::test specification[] =
{
CASE( "Empty string has length zero (succeed)" )
{
EXPECT( 0 == string( ).length() );
EXPECT( 0 == string("").length() );
},
}
Hinweis: Ich habe es nicht selbst ausprobiert.
"Ein benutzerfreundlicher Unit-Test für C++11"
Anscheinend "biegt sich dieses Framework nach hinten", um den Quellcode Ihres Tests wie eine Beschreibung eines Tests in natürlicher Sprache lesen zu lassen. Hier ist zum Beispiel ein Test einer Gitarre, der sicherstellt, dass sie im Distortion-Modus verzerrt klingt:
describe("in distorted mode", [&]() {
before_each([&]() { fuzzbox->flip(); });
it("sounds distorted", [&]() {
AssertThat(guitar->sound(), Equals(sounds::distorted));
});
});
Hinweis: Ich habe es selbst noch nicht ausprobiert.
Präsentiert auf der CppCon 2017 von Victor Kirilov
Dieses aktiv entwickelte Framework ist eigentlich nicht auf modernes C++ ausgerichtet, aber es zielt darauf ab, es mit seiner nächsten Hauptversion (2.0; es ist derzeit 1.2) zu sein.
Hinweis: Ich habe dies nicht selbst ausprobiert.
Mawg sagt, Monica wieder einzusetzen
einpoklum
Mawg sagt, Monica wieder einzusetzen