C++ Unit Tests
- Artificial Mind
- Establishment
- Beiträge: 802
- Registriert: 17.12.2007, 17:51
- Wohnort: Aachen
C++ Unit Tests
Hallo liebe Community,
ich wollte mal fragen, welche C++ Unit Test Frameworks ihr benutzt und ob ihr da Empfehlungen abgeben könnt.
Insbesondere suche ich nach einem auch für kommerzielle Projekte kostenlosen Framework, welches sich auch mit CMake-Projekten komfortabel benutzen lässt.
Wenn möglich, sollte es lightweight sein.
Persönlich habe ich bisher nur Boost Tests eingesetzt, allerdings ist Boost schon eine ziemlich große Abhängigkeit (welche sich auch unschön auf Compile-Zeit auswirkt) und deswegen falls möglich zu vermeiden.
Cheers
Mind
ich wollte mal fragen, welche C++ Unit Test Frameworks ihr benutzt und ob ihr da Empfehlungen abgeben könnt.
Insbesondere suche ich nach einem auch für kommerzielle Projekte kostenlosen Framework, welches sich auch mit CMake-Projekten komfortabel benutzen lässt.
Wenn möglich, sollte es lightweight sein.
Persönlich habe ich bisher nur Boost Tests eingesetzt, allerdings ist Boost schon eine ziemlich große Abhängigkeit (welche sich auch unschön auf Compile-Zeit auswirkt) und deswegen falls möglich zu vermeiden.
Cheers
Mind
-
- Establishment
- Beiträge: 467
- Registriert: 18.04.2002, 15:31
Re: C++ Unit Tests
Wir nutzen seit eh und je http://de.wikipedia.org/wiki/CppUnit. Ob das jetzt besonders gut oder schlecht ist, kann ich nicht sagen, da ich nie was anderes eingesetzt habe.
Die ganzen Makros sind nicht gerade hübsch, aber die Lib macht, was sie soll, ist plattformunabhängig und unter LGPL, kann also gratis und auch fürs Testen von kommerziellem Code benutzt werden.
Viele unserer Unittests haben fürchterlich viel Copy-and-Paste Code-Redundanz drin, aber ich vermute, dass liegt eher an den Kollegen, die sie implementiert haben, als an CppUnit.
Die ganzen Makros sind nicht gerade hübsch, aber die Lib macht, was sie soll, ist plattformunabhängig und unter LGPL, kann also gratis und auch fürs Testen von kommerziellem Code benutzt werden.
Viele unserer Unittests haben fürchterlich viel Copy-and-Paste Code-Redundanz drin, aber ich vermute, dass liegt eher an den Kollegen, die sie implementiert haben, als an CppUnit.
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
Re: C++ Unit Tests
Interessantes Thema, nachdem ich auch Unittests mit CMakes CTest machen wollte. Ich hatte mir mal das CppUnit-Framework installiert und die Doku ausgedruckt, bin aber noch nicht dazu gekommen sie zu lesen. Von daher, kaiserludi, wäre es schön wenn du deine Erfahrung teilen könntest. Z.b. Aufwand zum Schreiben eines Testtreibers. Aufwand der Einbindung in CTest.
Thoran
Thoran
Wer Rechtschreibfehler findet, darf diese gerne behalten.
Mein Entwicklertagebuch
Aktuelle Projekte: Universum: Domination (ehemalig AlphaOmega),Universum: Sternenjäger, PixelWars: Highscore-based Top-Down-Spaceshooter
Spieleengine Unreal 5
Mein Entwicklertagebuch
Aktuelle Projekte: Universum: Domination (ehemalig AlphaOmega),Universum: Sternenjäger, PixelWars: Highscore-based Top-Down-Spaceshooter
Spieleengine Unreal 5
- kimmi
- Moderator
- Beiträge: 1405
- Registriert: 26.02.2009, 09:42
- Echter Name: Kim Kulling
- Wohnort: Luebeck
- Kontaktdaten:
Re: C++ Unit Tests
Wir / ich mache(n) Unittests mit cppunit. Meine Render-testsuite habe ich von hand zusammen geklöppelt.
Gruß Kimmi
Gruß Kimmi
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: C++ Unit Tests
Google Test ist sehr, sehr angenehm.
cppunit funktioniert auch ganz gut, ist aber eher klobig.
cppunit funktioniert auch ganz gut, ist aber eher klobig.
Re: C++ Unit Tests
Google Test kannte ich bisher gar nicht, muß ich mir mal anschauen. Danke für den Hinweis.
Wer Rechtschreibfehler findet, darf diese gerne behalten.
Mein Entwicklertagebuch
Aktuelle Projekte: Universum: Domination (ehemalig AlphaOmega),Universum: Sternenjäger, PixelWars: Highscore-based Top-Down-Spaceshooter
Spieleengine Unreal 5
Mein Entwicklertagebuch
Aktuelle Projekte: Universum: Domination (ehemalig AlphaOmega),Universum: Sternenjäger, PixelWars: Highscore-based Top-Down-Spaceshooter
Spieleengine Unreal 5
-
- Establishment
- Beiträge: 467
- Registriert: 18.04.2002, 15:31
Re: C++ Unit Tests
So sieht bei uns ein typischer Testcase aus:Thoran hat geschrieben:Interessantes Thema, nachdem ich auch Unittests mit CMakes CTest machen wollte. Ich hatte mir mal das CppUnit-Framework installiert und die Doku ausgedruckt, bin aber noch nicht dazu gekommen sie zu lesen. Von daher, kaiserludi, wäre es schön wenn du deine Erfahrung teilen könntest. Z.b. Aufwand zum Schreiben eines Testtreibers. Aufwand der Einbindung in CTest.
Thoran
Code: Alles auswählen
/**
* Test of <PhotonPeer::Connect>.
* +
*/
void PhotonUnitTest::testPhotonPeerConnect(void)
{
//! Check connection for correct IP address with explicit correct port (EG_PORT_xxx).
JString Url = PhotonUnitTest::getServerAddress(true);
bool connectResult = peer1->connect(Url);
CPPUNIT_ASSERT(connectResult);
JString Msg = L"Connect To Correct Server with explicit port (" + Url + ")";
checkStatusForPeer1(Msg, SC_CONNECT);
peer1->disconnect();
checkStatusForPeer1(L"Disconnect From Correct Server (with port)", SC_DISCONNECT);
//! Check connection for incorrect IP address.
Url = L"328.0.0.1";
Msg = L"Connect To Incorrect IP address (" + Url + ")";
connectResult = peer1->connect(Url);
CPPUNIT_ASSERT(!connectResult);
//! Check connection for correct, but not responding, IP
Url = L"google.com";
connectResult = peer1->connect(Url);
CPPUNIT_ASSERT(connectResult);
Msg = L"Connect To Incorrect Server (" + Url + ")";
checkStatusForPeer1(Msg, SC_TIMEOUT_DISCONNECT);
//! Check connection for correct IP address with incorrect MIN port (0000).
// port 0 is a special case: this port is interpreted as syntax error (for no number found, the lib is remaining on init-value, which is 0) in port-part of the string by PhotonPeerConnect and so function-call will return an error and we do not have to wait for a timeout like for other ports
JString serverIPCorrectPortIncorrectMinValue = PhotonUnitTest::getServerAddress(false) + ":0000";
Msg = L"Connect To Incorrect Server (" + serverIPCorrectPortIncorrectMinValue + ")";
connectResult = peer1->connect(serverIPCorrectPortIncorrectMinValue);
CPPUNIT_ASSERT(!connectResult);
//! Check connection for correct IP address with incorrect MAX port (65535).
JString serverIPCorrectPortIncorrectMaxValue = PhotonUnitTest::getServerAddress(false) + ":65535";
connectResult = peer1->connect(serverIPCorrectPortIncorrectMaxValue);
CPPUNIT_ASSERT(connectResult);
Msg = L"Connect To Incorrect Server (" + serverIPCorrectPortIncorrectMinValue + ")";
checkStatusForPeer1(L"Connect To Incorrect Server", SC_TIMEOUT_DISCONNECT);
}
Code: Alles auswählen
suite->addTest(new CppUnit::TestCaller<PhotonUnitTest>("\n\n testPhotonPeerConnect", &PhotonUnitTest::testPhotonPeerConnect));
Keine Ahnung, was du mit Testtreiber meinst und wie aufwendig es ist, dass in CTest einzubinden, kann ich nicht sagen. Wir haben die Unittests als Visual Studio Projekt, welches die zu testenden Libs einbindet und eine executable erzeugt, aufgesetzt.
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
- Artificial Mind
- Establishment
- Beiträge: 802
- Registriert: 17.12.2007, 17:51
- Wohnort: Aachen
Re: C++ Unit Tests
Also ich habe mir jetzt Google Test angeguckt und eingebaut und der große Vorteil ist halt, dass man die Tests nichtmal registrieren muss, da sie sich selbst global registrieren.
-
- Establishment
- Beiträge: 467
- Registriert: 18.04.2002, 15:31
Re: C++ Unit Tests
Hört sich für mich eher nach einem Nachteil an, da man dann ja alle Testcases, die man nicht duchlaufen lassen will, auskommentieren muss, statt nur die Registrierungszeilen, wenn man z.B. gerade debuggt, warum ein Testcase fehlschlägt und dann natürlich entsprechend nicht bei jedem Testlauf erstmal alle Tests davor durchlaufen lassen will.Artificial Mind hat geschrieben:Also ich habe mir jetzt Google Test angeguckt und eingebaut und der große Vorteil ist halt, dass man die Tests nichtmal registrieren muss, da sie sich selbst global registrieren.
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
- Artificial Mind
- Establishment
- Beiträge: 802
- Registriert: 17.12.2007, 17:51
- Wohnort: Aachen
Re: C++ Unit Tests
Man kann schon einzelne Tests oder auch Test-Cases (mehrere gruppierte Tests) einzeln laufen lassen.