Worauf sollte ich bei der Bewertung von Unit-Testing-Bibliotheken und -Tools achten?


8

Ich bin gerade dabei, neue Unit-Test-Tools für das bald zu startende Projekt auszuwählen. Es gibt viele davon!

Die Grundvoraussetzungen, die ich habe, wären, dass es Tests unter mindestens Windows und Linux ausführen kann, C ++ / C ++ 03-kompatibel ist, Tests parallel ausführen kann (z. B. um Multi-Core-Prozessoren zu nutzen) und es kann über die Befehlszeile ausgeführt werden. Dies sind jedoch ziemlich breite Anforderungen, die das Feld nicht eingegrenzt haben.

Um dies zu versuchen, untersuche ich mögliche Fallstricke und Fallstricke verschiedener Arten von Implementierungen. Wenn ich beispielsweise eine Unit-Test-Engine in einer höheren Sprache wie Python verwenden wollte, würde sie dann immer noch eine Ausgabe erzeugen, die wie C-Unit-Tests formatiert ist? Meine Hauptabsicht hier ist es, die gleichen Speicher- und Berichtstools für C ++ - und Python-Ergebnistests zu verwenden.

Ich frage mich auch, ob es notwendig ist, eine bestimmte Engine zu haben, um die Tests auszuführen, oder ob es ausreicht, sie in unsere Continuous Integration Engine (Buildbot) zu integrieren.

Sind diese beiden oben genannten Bedenken berechtigt? Worüber sollte ich mich bei der Bewertung von Unit-Testing-Motoren noch Gedanken machen?


1
Hallo Didier Trosset, ich habe Ihre Frage ein wenig überarbeitet, um sicherzustellen, dass die Leute sie nicht mit einer Empfehlungsfrage für Motorentests verwechseln, die hier nicht zum Thema gehört. Gute Frage sonst!

Antworten:


3

Ich habe sowohl Google Test als auch Boost Test verwendet . Beide sind xUnit-Frameworks, funktionieren unter Unix und Windows und sind ausgereift. Aufgrund von Google Mock habe ich Google Test verwendet, da ich auch ein spöttisches Framework haben wollte. Beides sollte unter Buildbot gut funktionieren.

Persönlich möchte ich, dass das Unit-Test-Framework minimal und schnell ist. Ich möchte viele Tests und möchte daher, dass sie in einem angemessenen Zeitrahmen ausgeführt werden. Ich persönlich verwende gerne das Haupt-Framework für eine Sprache anstelle eines Mega-Tools, aber das ist persönlich. Wenn Sie möchten, können Sie sich kontinuierliche Iterationstests ansehen: Jedes Mal, wenn Sie eine Datei speichern, werden die Testfälle, von denen die Datei abhängt, automatisch ausgeführt.

Sie können jederzeit eine Interface-Klasse in Ihren Unit-Test schreiben, um einen schnellen und effektiven Wechsel der Frameworks zu ermöglichen.


+1 Iterationsgeschwindigkeit ist der Schlüssel codinghorror.com/blog/2007/02/boyds-law-of-iteration.html
jk.

2

Meine Erfahrungen umfassen CruiseControl.NET und Team Foundation Build. Ich bin selbst ein .NET-Entwickler. Diese stammen aus meinen Erfahrungen und umfassen nur die Erfahrungen, bei denen wir im Rahmen des Erstellungsprozesses Tests durchgeführt haben. Wenn sie also nicht zu Ihrer Umgebung passen, tut mir leid.

Ich frage mich auch, ob es notwendig ist, eine bestimmte Engine zu haben, um die Tests auszuführen, oder ob es ausreicht, sie in unsere Continuous Integration Engine zu integrieren

Wenn Sie bei jedem Check-in einen Build ausführen, können Builds ausgelöst werden, bevor der vorherige Build ausgeführt wird. Wie wollen Sie mit solchen Situationen umgehen? Wenn es beispielsweise 30 Minuten dauert, bis die gesamte Testsuite durchlaufen ist und der Code alle 15 Minuten eingecheckt wird, möchten Sie einige Builds überspringen? Einige Tests überspringen? Stapeln Sie sie, bauen Sie sie in der richtigen Reihenfolge und melden Sie sich bei Bob, dass er den Build vor 5 Stunden mit seinem Check-in abgebrochen hat?

Team Foundation Build kann mit 2010 mehrere Kerne für Builds und Tests verwenden (frühere Versionen konnten nur mehrere Kerne für C ++ - Builds verwenden). CruiseControl.NET kann separate Threads ausführen. Wenn Sie jedoch die Dokumentation lesen , scheint es, dass sich jedes Projekt in einem eigenen Thread befinden kann, Sie jedoch nicht mehrere Threads pro Projekt haben können (ich kann mich irren). Wir hatten noch nie eine Multi-Core-Maschine für Builds in den Umgebungen, in denen ich gearbeitet habe, daher kann ich nicht darüber sprechen, wie gut / fair / schlecht sie sind (oder falsch ich bin).

Bei einem früheren Arbeitgeber haben wir Python-Skripte in den Build aufgenommen, aber wir hatten keine Tests zum Testen von Python eingerichtet. NANT wurde für die .NET-Komponenten verwendet.

Ich frage mich auch, ob es notwendig ist, einen bestimmten Motor zu haben, um die Tests auszuführen

Ich hatte nie Zeit dafür, aber bei einem früheren Arbeitgeber (wir haben "Shrinkwrap" -Software verkauft) hatten wir viele Fehler, die betriebssystemspezifisch (und manchmal Service Pack-spezifisch) waren. Eines meiner Ziele war es, mehrere Tests einzurichten Computer mit unterschiedlichen Betriebssystemen (sowohl 32 + 64 Bit als auch alle verschiedenen Versionen von Desktop- und Server-Windows ab XP). Die Build-Maschinen waren einfache und ältere WinXP-Maschinen (oder virtuelle Maschinen), da dies die gesamte "Hardware" war, die uns von den Managern gestattet wurde. Stattdessen wurden alle Tests auf der Build-Maschine ausgeführt. Wir haben auch Validierungssuiten als Sammlungen von Komponententests eingerichtet, obwohl diese nicht für kleinere Aktualisierungen ausgeführt wurden.


@Sardathrion, Überprüfung des Versionsverlaufs, "der Linux-Teil" wurde hinzugefügt, nachdem ich meine Antwort gepostet habe.
Tangurena

Um den Revisionsverlauf anzuzeigen, klicken Sie unter der Frage auf den Link unter "Vor x Stunden bearbeitet".
Tangurena

@ Tanguerna: Ah, danke für die Klarstellung. Könnten Sie Ihre Frage leicht bearbeiten, damit ich die Abwahl entfernen kann? Die Abstimmung erscheint oben gesperrt.
Sardathrion - gegen SE Missbrauch

@ Sardathrion, fertig.
Tangurena

Fertig und positiv bewertet - Obwohl Sie eine Notiz hinterlassen, dass die Linux-Anforderung später hinzugefügt wurde, werden Sie von pedantischen Leuten wie mir abgelehnt. ^ _ ~
Sardathrion - gegen SE Missbrauch
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.