<?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[herangehensweise beim schreiben v. unit-tests?]]></title><description><![CDATA[<p>hi,<br />
ich muss (zum ersten mal) fuer ein paar relativ kleine klassen unit-tests schreiben.<br />
alles, was ich finden konnte, war eine menge an infos zu verschiedensten testing-frameworks.<br />
allerdings moechte ich wissen, wie man prinzipiell einen _einfachen_ unit-test (kein ganzes testing framework) schreibt, wie man systematisch vorgeht, quasi die grundprinzipien.</p>
<p>oder schreibt man einfach ne klasse mit ein paar methoden, die dann der zu testende klasse irgendwie testwerte gibt und auf das jeweils korrekte ergebnis prueft?</p>
<p>mfg,<br />
julian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/212271/herangehensweise-beim-schreiben-v-unit-tests</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 18:14:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/212271.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 May 2008 23:41:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to herangehensweise beim schreiben v. unit-tests? on Sun, 04 May 2008 00:02:59 GMT]]></title><description><![CDATA[<p>hi,<br />
ich muss (zum ersten mal) fuer ein paar relativ kleine klassen unit-tests schreiben.<br />
alles, was ich finden konnte, war eine menge an infos zu verschiedensten testing-frameworks.<br />
allerdings moechte ich wissen, wie man prinzipiell einen _einfachen_ unit-test (kein ganzes testing framework) schreibt, wie man systematisch vorgeht, quasi die grundprinzipien.</p>
<p>oder schreibt man einfach ne klasse mit ein paar methoden, die dann der zu testende klasse irgendwie testwerte gibt und auf das jeweils korrekte ergebnis prueft?</p>
<p>mfg,<br />
julian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502863</guid><dc:creator><![CDATA[Julian__]]></dc:creator><pubDate>Sun, 04 May 2008 00:02:59 GMT</pubDate></item><item><title><![CDATA[Reply to herangehensweise beim schreiben v. unit-tests? on Sun, 04 May 2008 11:09:22 GMT]]></title><description><![CDATA[<p>Die test-frameworks werden hauptsächlich verwendet um<br />
a) praktische test-macros zur verfügung zu stellen und<br />
b) eine main() funktion bereitzustellen der man bestimmte parameter mitgeben kann, die dann bestimmen wie die ausgaben formatiert werden sollen, oder welche tests überhaupt laufen sollen</p>
<p>weiters wird dafür gesorgt dass bestimmte dinge nicht übersehen werden, z.b. wenn ein test mit einer exception abbricht.</p>
<p>was &quot;a)&quot; angeht: hier meine ich macros die sich z.b. darum kümmern dass, falls bestimmte voraussetzungen nicht erfüllt sind, bestimmte fehlermeldungen ausgegeben werden. z.b. wirst du nicht jedesmal einen ganzen try-catch block schreiben wollen, wenn du checken willst dass unter bestimmten voraussetzungen eine ganze bestimmte exception geworfen wird. oder eben keine exception geworfen wird.</p>
<p>wenn du z.b. boost.test verwendest kannst du einfach schreiben:</p>
<pre><code class="language-cpp">BOOST_AUTO_TEST_CASE(std_vector_at_throws_logic_error_when_out_of_range)
{
    std::vector&lt;int&gt; v;
    BOOST_CHECK_THROW(v.at(0), std::logic_error);
    v.push_back(123);
    BOOST_CHECK_NO_THROW(v.at(0));
    BOOST_CHECK_THROW(v.at(1), std::logic_error);
}
</code></pre>
<p>ohne boost.test müsste die funktion inetwa so aussehen:</p>
<pre><code class="language-cpp">unsigned int g_errors = 0;

void std_vector_at_throws_logic_error_when_out_of_range()
{
    std::vector&lt;int&gt; v;
    bool e = false;
    try {
        v.at(0);
        printf(&quot;error: no exception caught, expected std::logic_error.\n&quot;);
        g_errors++;
    } catch(std::logic_error const&amp;) {
        // ok, do nothing
    } catch(...) {
        printf(&quot;error: unexpected exception.\n&quot;);
        g_errors++;
    }
    v.push_back(123);
    try {
        v.at(0);
    } catch(...) {
        printf(&quot;error: unexpected exception.\n&quot;);
        g_errors++;
    }
    try {
        v.at(1);
        printf(&quot;error: no exception caught, expected std::logic_error.\n&quot;);
        g_errors++;
    } catch(std::logic_error const&amp;) {
        // ok, do nothing
    } catch(...) {
        printf(&quot;error: unexpected exception.\n&quot;);
        g_errors++;
    }
}
</code></pre>
<p>alleine der übersichtlichkeit halber würde ich also schon empfehlen ein test-framework zu verwenden. natürlich kann man sich die entsprechenden funktionen und macros auch selbst basteln, aber wieso das rad neu erfinden wenn andere sich schon die arbeit gemacht haben?</p>
<blockquote>
<p>oder schreibt man einfach ne klasse mit ein paar methoden, die dann der zu testende klasse irgendwie testwerte gibt und auf das jeweils korrekte ergebnis prueft?</p>
</blockquote>
<p>man schreibt üblicherweise test-funktionen, die möglichst die gesamten specs einer API prüfen. also quasi das ganze definierte verhalten einer API wird geprüft. wenn man die einzelnen tests auch noch ein wenig kommentiert hat man so schon eine ganz brauchbare dokumentation, was ein angenehmer nebeneffekt ist.<br />
vor allem kann man die tests einfach laufen lassen, und damit schnell sicher sein dass das in den tests dokumentierte verhalten auch der wirklichkeit entspricht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502985</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 04 May 2008 11:09:22 GMT</pubDate></item><item><title><![CDATA[Reply to herangehensweise beim schreiben v. unit-tests? on Sun, 04 May 2008 16:33:57 GMT]]></title><description><![CDATA[<p>alles klar, vielen dank fuer die kleine einfuehrung hustbaer!<br />
ich werde dann mal sehen, wie ich mit nem framework zurechtkomme, evtl. probiere ich ein paar aus.<br />
auch wenn ich noch das gefuehl hab, fuer sowas kleines was ich machen muss, ist das etwas overkill, kann es wohl nicht schaden, damit schonmal gearbeitet zu haben ...</p>
<p>mfg,<br />
julian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1503190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1503190</guid><dc:creator><![CDATA[Julian__]]></dc:creator><pubDate>Sun, 04 May 2008 16:33:57 GMT</pubDate></item><item><title><![CDATA[Reply to herangehensweise beim schreiben v. unit-tests? on Sun, 04 May 2008 17:03:13 GMT]]></title><description><![CDATA[<p>Ich hätte da mal eine Frage zu (wo sich schon mal jemand mit auskennt):<br />
Testen man eher von &quot;innen&quot; oder von &quot;außen&quot;? Ich meine damit, ich mache Tests (wenn ich sie mache), meistens ziemlich unprofessionell und zwar so:</p>
<pre><code class="language-cpp">class ABC {
    public:
        static bool testYourself();
};

int main() {
    assert( ABC::testYourself() );
}
</code></pre>
<p>Sollte eher die Klasse sich selbst prüfen (soweit das autonom möglich ist), oder sollte von außen gegen das spezifizierte Verhalten getestet werden?</p>
<p>edit: Ok, wo ich mir das nochmal durchlese, es wird wahrscheinlich das letztere sein; vor allem auch, weil ja ein externer Mensch (=nicht-der-Entwerfer-des-zu-testenden-Objektes) die Tests schreiben kann, der wäre weniger &quot;betriebsblind&quot;. Trotzdem würde mich ein kurzes Statement noch interessieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1503212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1503212</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 04 May 2008 17:03:13 GMT</pubDate></item></channel></rss>