<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[CppUnit Tests über Interface-Klassen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich möchte meine Schreibarbeit beim Erstellen von UnitTests gerne reduzieren und doppelten Code vermeiden. Deshalb war meine Idee nicht mit jeder neuen Klasse einen eigenen Uni-Test zu schreiben, sondern stattdessen (wo möglich) nur einen einzigen Test basierend auf der geerbten Interface-Klasse. Instanzen der konkreten Implementationen würde ich dann über Factorys in den setUp() und tearDown() Methoden der TestFixtures erzeugen. Soweit so gut.</p>
<p>Mein Problem ist nun, ich würde gerne alle konkreten Implementationen in einem einzigen Testlauf prüfen lassen. Hab aber keine Ahnung, wie ich das elegant anstellen könnte. Zur Zeit müsste ich immer die entsprechende Factory einsetzen.</p>
<p>Zur Veranschaulichung villeicht noch ein knappes Beispiel (unwesentliche Details, wie Destruktoren usw mal dreist weggelassen)</p>
<pre><code class="language-cpp">class IVehicle{
	virtual bool wrumwrum() = 0;
}

class Car : public Vehicle
class Truck : public Vehicle
</code></pre>
<pre><code class="language-cpp">class VehicleTest : public CPPUNIT_NS::TestFixture
{
	CPPUNIT_TEST(someTest);
private:
	IVehicle *pVehicle;

public:
	void setUp()
	{
		pVehicle = CarFactory.create();
//		pVehicle = TruckFactory.create();
	}
	void tearDOwn()
	{
		delete pVehicle;
	}
protected:
	void someTest()
	{
		pVehicle-&gt;wrumwrum();
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/272186/cppunit-tests-über-interface-klassen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 00:09:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272186.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Aug 2010 11:39:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CppUnit Tests über Interface-Klassen on Thu, 12 Aug 2010 11:39:56 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich möchte meine Schreibarbeit beim Erstellen von UnitTests gerne reduzieren und doppelten Code vermeiden. Deshalb war meine Idee nicht mit jeder neuen Klasse einen eigenen Uni-Test zu schreiben, sondern stattdessen (wo möglich) nur einen einzigen Test basierend auf der geerbten Interface-Klasse. Instanzen der konkreten Implementationen würde ich dann über Factorys in den setUp() und tearDown() Methoden der TestFixtures erzeugen. Soweit so gut.</p>
<p>Mein Problem ist nun, ich würde gerne alle konkreten Implementationen in einem einzigen Testlauf prüfen lassen. Hab aber keine Ahnung, wie ich das elegant anstellen könnte. Zur Zeit müsste ich immer die entsprechende Factory einsetzen.</p>
<p>Zur Veranschaulichung villeicht noch ein knappes Beispiel (unwesentliche Details, wie Destruktoren usw mal dreist weggelassen)</p>
<pre><code class="language-cpp">class IVehicle{
	virtual bool wrumwrum() = 0;
}

class Car : public Vehicle
class Truck : public Vehicle
</code></pre>
<pre><code class="language-cpp">class VehicleTest : public CPPUNIT_NS::TestFixture
{
	CPPUNIT_TEST(someTest);
private:
	IVehicle *pVehicle;

public:
	void setUp()
	{
		pVehicle = CarFactory.create();
//		pVehicle = TruckFactory.create();
	}
	void tearDOwn()
	{
		delete pVehicle;
	}
protected:
	void someTest()
	{
		pVehicle-&gt;wrumwrum();
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1939152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1939152</guid><dc:creator><![CDATA[enki]]></dc:creator><pubDate>Thu, 12 Aug 2010 11:39:56 GMT</pubDate></item><item><title><![CDATA[Reply to CppUnit Tests über Interface-Klassen on Thu, 12 Aug 2010 14:14:15 GMT]]></title><description><![CDATA[<p>Ein Templateparameter der den konkreten Typ oder die jeweilige Fabrik angibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1939242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1939242</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Thu, 12 Aug 2010 14:14:15 GMT</pubDate></item><item><title><![CDATA[Reply to CppUnit Tests über Interface-Klassen on Thu, 12 Aug 2010 18:48:43 GMT]]></title><description><![CDATA[<p>brotbernd schrieb:</p>
<blockquote>
<p>Ein Templateparameter der den konkreten Typ oder die jeweilige Fabrik angibt?</p>
</blockquote>
<p>Das funktioniert tatsächlich und zwar folgendermaßen (man beachte die letzten zwei Zeilen).</p>
<pre><code class="language-cpp">#include &lt;cppunit/config/SourcePrefix.h&gt;
#include &lt;cppunit/extensions/HelperMacros.h&gt;

#include &lt;ivehicle.h&gt;
#include &lt;car.h&gt;
#include &lt;truck.h&gt;

template &lt;class T&gt;
class IVehicleTest : public CPPUNIT_NS::TestFixture
{
	CPPUNIT_TEST_SUITE(IVehicleTest&lt;T&gt;);
	CPPUNIT_TEST(someTest);
	CPPUNIT_TEST_SUITE_END();
private:
	IVehicle *pVehicle;
public:
	void setUp()
	{
		pVehicle = new T();
	}
	void tearDown()
	{
		delete pVehicle;
	}
protected:
	void someTest()
	{
		CPPUNIT_ASSERT( pVehicle-&gt;wrumwrum() );
	}
};

CPPUNIT_TEST_SUITE_REGISTRATION(IVehicleTest&lt;Car&gt;);
CPPUNIT_TEST_SUITE_REGISTRATION(IVehicleTest&lt;Truck&gt;);
</code></pre>
<p>Ob das aber so schön ist weiß nicht. Von den CppUnit Entwicklern war das jedenfalls nicht so geplant, denn die Ausgabe des Testlaufs kriegt es nicht hin die spitzen Klammern der Template-Klasse und den Scope-Operator richtig darzustellen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1939359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1939359</guid><dc:creator><![CDATA[enki]]></dc:creator><pubDate>Thu, 12 Aug 2010 18:48:43 GMT</pubDate></item></channel></rss>