Seite 1 von 1

Unit Testing Framework für C++ / C# ?

Verfasst: 01.12.2011, 09:49
von ponx
hallo liebe Leute,
es wird Zeit, dass ich mir ein ordentliches Test-Konzept für unsere Musik-Middleware überlege. Das ganze ist im Kern eine native dll unter Windows mit einem .NET-Wrapper drumrum. Ich wollte ja eigentlich das Test-Framework von Visual Studio 2010 benutzen, aber musste dann feststellen, dass Projekte mit nativem C/C++ nicht unterstützt werden..! (ich versteh nicht, warum). Jetzt wollte ich fragen, was ihr mir als Alternative empfehlen könnt ? ich würde die Tests gerne in C# schreiben (da kann ich den Wrapper dann gleich mittesten), und dann ggf mit dem Debugger in den C++-Code reinsteppen können. Wenn's nicht die Welt kostet, zur Not auch kommerziell.

danke und viele Grüße,
ponx

Re: Unit Testing Framework für C++ / C# ?

Verfasst: 01.12.2011, 11:42
von dowhilefor
Wir, und ich auch privat, benutzen nunit für unsere C# Unittests. Mit unmannaged debugging sollte, da bin ich mir nicht so ganz sicher, es möglich sein beides zu debuggen.
Empfehlenswert dazu ist ein addin was dir das starten der Unittests vereinfacht, da die GUI von nunit nicht die beste und das ständige attachen daran nervig ist. Fürs starten gibt es einige addins für mich das beste ist aber die resharper funktion. Resharper selber kostet aber etwas.

Re: Unit Testing Framework für C++ / C# ?

Verfasst: 01.12.2011, 12:16
von kimmi
EIne Kombination von nunit und cppunit wäre doch was. Außerdem rate ich dir dazu, zwischen reinen Unittests und Komponententests sowie Demos zu unterscheiden. Unittests testen dabei Module ( Klassen ), Komponententests das Zusammenspiel, Demos das Gesamtbild. IN der Regel wird erst dann ein Schhu draus.

Gruß Kimmi

Re: Unit Testing Framework für C++ / C# ?

Verfasst: 01.12.2011, 14:49
von ponx
vielen Dank euch beiden ! Gibts einen grundsätzlichen Unterschied, wie man Komponententests bzw Demos im Vergleich zu Unitttests aufzieht ? Oder ergibt sich das aus den jeweils getesteten Klassen / Methoden ?
NUnit ist auf jeden Fall einer der Favoriten, vielen Dank. Ich hoff nur ich kann da auch C++ mit erschlagen. Google Test scheint relativ neu zu sein, das guck ich mir neben CppUnit wohl auch noch an.

Re: Unit Testing Framework für C++ / C# ?

Verfasst: 01.12.2011, 15:06
von Chromanoid
Also Komponententests (afaik meistens Integrationstest genannt) sollte man vielleicht nicht automatisch beim neukompilieren ausführen, da die normalerweise mehr Zeit beanspruchen. Zumindest für Java Projekte wird daher oft empfohlen, diese Tests in ein anderes Paket als die unittests zu packen. In der Regel läuft es glaube ich darauf hinaus, dass man eine Art GUIlose Variante der Anwendung mit verschiedenen Komponenten per Code startet und dann eben durch Funktionsaufrufe das Zusammenspiel der Komponenten abtestet.

Es gibt sonst übrigens auch noch Test Management Tools für von Menschen durchgeführte Tests. Ist vielleicht auch noch ganz nützlich, wenn es um komplexere Aufgaben und allgemeine Qualitätssicherung geht...

Re: Unit Testing Framework für C++ / C# ?

Verfasst: 01.12.2011, 16:42
von kimmi
Ich mache Modultests, also wirkliche Tests auf Klassebene gern mit Cppunit / NUnit. Komponenten-Tests bzw. Integrationstest kann man damit ebenfalls machen, ist man sich der Tatsache bewußt, dass man damit halt keine wirklichen Unittests durchführt. Diese dauern in der Regel länger, da man ggfs. noch ein benötigtes Environment hochfahren muß etc. .
Usecases habe ich je nach Anwendungsfall entweder durch eine spezielle Demo abgedeckt oder benutze eine Script-Sprache, sofern die Anwendung unter Test das anbietet bzw. das aufgrund der Komplexität Sinn macht ( zum Beispiel bei einer Engine Kamera animieren etc. ). Dafür habe ich bisher gern Python bzw. Lua genommen. Ich kenne da aber auch Anwendungen, bei denen XML zum EInsatz kommt.

Die Unit-, Komponenten- und Demo-Tests waren immer getrennt, damit man sie auch separat anstarten kann. Unittests zum Beispiel sollten nur einige Sekunden dauern und sind mir ein gutes Hilfsmittel bei der täglichen Arbeit. Komponenten / Integrations-Tests fungieren eher als Smoke-Tests für einen neu releasten Build, der von eine CI-Server angestartet wird.

Gruß Kimmi