Vergleichen CppTest und CppUnit Ich würde mit CppTest gehen. CppTest hat weniger versteckten Rahmen und IMO leichter zu verstehen und zu implementieren. Ich persönlich möchte den Haupt Einstiegspunkt sehen. Ich habe auch Boost Unit Testing Framework enthalten. Es ist nicht xUnit basiert. Ich bin kein Fan, aber wenn Sie bereits die Boost-Bibliothek verwenden, wäre es schön zu integrieren.
CppTest vs CppUnit
• Einfache einen Komponententest und Test der Erstellung Suite. Sowohl CppUnit als auch CppTest erstellen Komponententests von Klassenmethoden, wobei die Klasse selbst von einer vom Tool bereitgestellten Testklasse abgeleitet wird. Die Syntax für CppTest ist etwas einfacher, obwohl mit der Testregistrierung innerhalb der Klasse Konstruktor geschieht. Bei CppUnit, werden die zusätzlichen Makros CPPUNIT_TEST_SUITE und CPPUNIT_TEST_SUITE_ENDS benötigt.
• Durchführung der Tests. CppTest einfach ruft die run-Methode auf dem Test Suite, während CppUnit eine separate Testrunner Klasse, deren Lauf verwendet Methode aufgerufen für die Tests ausgeführt werden.
• Erweiterung der Testhierarchie. In Fall von CppTest ist es immer möglich, den vorherigen Test Suite zu erweitern, indem Sie eine neue Klasse erstellen, die von der alten erbt. Die neue Klasse definiert einige zusätzliche Funktionen, die zum Komponententest Pool hinzugefügt werden. Sie rufen einfach die run-Methode für das Objekt des neuen Klassentyps auf. CppUnit erfordert dagegen, dass Sie das Makro CPPUNIT_TEST_SUB_SUITE zusammen mit Klassenvererbung verwenden, um denselben Effekt zu erreichen.
• Generierte formatierte Ausgabe. Sowohl CppTest als auch CppUnit verfügen über die Fähigkeit , die Ausgabe anzupassen. Allerdings obwohl CppTest hat eine nützliche, vordefinierte HTML-Ausgabe Formatierer, CppUnit nicht. CppUnit unterstützt jedoch ausschließlich XML-Formatierung. Beide unterstützen Text und Compiler-Stil Formate.
• Erstellen von Testvorrichtungen. Um Test Fixtures zu verwenden, erfordert CppUnit, dass die Testklasse von CppUnit :: TestFixture abgeleitet werden. Sie müssen Definitionen für die Setup-und Zerlegungsroutinen bereitstellen. Im Fall von CppTest müssen Sie Definitionen nur für die Setup-und Abbau-Routinen bereitstellen. Dies ist definitiv eine bessere Lösung, da es den Client-Code einfach hält. • Vordefiniert Dienstprogramm Makrounterstützung. Beide CppTest und CppUnit haben einen vergleichbaren Satz von Makros für Geltendmachung, Handhabung von Floats, und so weiter.
• Header-Dateien. CppTest erfordert, dass Sie eine einzelne Header-Datei, enthalten, während CppUnit-Client-Code mehrere Header wie HelperMacros.h und TextTestRunner.h je nach den Features enthalten muss.
http://www.ibm.com/developerworks/aix/library/au-ctools3_ccptest/index.html?ca=drs-
CPPTEST
#include “cppTest.h”
class myTestWithFixtures : public Test::Suite {
void function1_to_test_some_code();
void function2_to_test_some_code();
public:
myTestWithFixtures () {
TEST_ADD (function1_to_test_some_code) {...};
TEST_ADD (function2_to_test_some_code) {...};
}
protected:
virtual void setup() { ... };
virtual void tear_down() { ... };
};
int main ()
{
myTestWithFixtures tests;
Test::TextOutput output(Test::TextOutput::Verbose);
return tests.run(output);
}
http://www.ibm.com/developerworks/aix/library/au-ctools3_ccptest/index.html?ca=drs-
CppUnit
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TextTestRunner.h>
#include <cppunit/extensions/HelperMacros.h>
class mystringTest : public CppUnit::TestFixture {
public:
void setUp() { ... };
void tearDown() { ... };
void function1_to_test_some_code() { ... };
void function2_to_test_some_code() { ... };
CPPUNIT_TEST_SUITE(mystringTest);
CPPUNIT_TEST(function1_to_test_some_code);
CPPUNIT_TEST(function2_to_test_some_code);
CPPUNIT_TEST_SUITE_END();
};
CPPUNIT_TEST_SUITE_REGISTRATION(mystringTest);
mit aus Makros
int main()
{
CppUnit::TestSuite* suite = new CppUnit::TestSuite("mystringTest");
suite->addTest(new CppUnit::TestCaller<mystringTest>("checkLength",
&mystringTest::checkLength));
suite->addTest(new CppUnit::TestCaller<mystringTest>("checkValue",
&mystringTest::checkLength));
// client code follows next
CppUnit::TextTestRunner runner;
runner.addTest(suite);
runner.run();
return 0;
}
http://www.ibm.com/developerworks/aix/library/au-ctools2_cppunit/
Boost-Unit Testing Framework
#include <boost/test/unit_test.hpp>
using namespace std;
struct CMyFooTestFixture
{
CMyFooTestFixture() { ... } //SetUp
~CMyFooTestFixture() { ... } //TearDown
void function1_to_test_some_code(CMyFoo& foo) { ... };
void function2_to_test_some_code(CMyFoo& foo) { ... };
}
BOOST_FIXTURE_TEST_SUITE(MyFooTest, CMyFooTestFixture);
BOOST_AUTO_TEST_CASE(function1_to_test_some_code)
{
CMyFoo foo;
function1_to_test_some_code(foo);
}
BOOST_AUTO_TEST_CASE(function1_to_test_some_code2)
{
CMyFoo foo;
function1_to_test_some_code(foo);
}
BOOST_AUTO_TEST_SUITE_END();
http://www.beroux.com/english/articles/boost_unit_testing/
Ich mag cppunit als eine leichte Einheit Test Framework. :-) –