Zusammenfassung der Vor- und Nachteile beim Wechsel von CUnit zu Google Test

Zielgruppe und Zweck dieser Seite

Es ist für Personen gedacht, die CUnit als Unit-Test-Framework verwenden. ・ Personen, die Google Test ihrer Umgebung empfehlen möchten ・ Personen, die zu Google Test wechseln und den Betroffenen dessen Nützlichkeit erklären möchten

Es ist für Leute gedacht, die nach einem Testframework suchen, das einfacher zu verwenden ist als CUnit, aber ich denke, der Inhalt ist im Vergleich zu anderen Seiten dünn. Ich kenne GoogleTest bis zu einem gewissen Grad und konzentriere mich darauf, wie ich es anderen empfehlen kann.

Ich denke, es wäre besser, einen Beispielcode zu haben, aber ich werde ihn hochladen, wenn es nötig ist.

Was ist Google Test?

GoogleTest ist wie CUnit ein Unit-Testing-Framework. Alle Handbücher sind online verfügbar (obwohl ich denke, dass CUnit diesbezüglich auch solche hat). http://opencv.jp/googletestdocs/primer.html

Ich habe 1.8.0 von hier heruntergeladen und verwendet. https://github.com/google/googletest/releases

verdienen

Ich habe versucht, sie in der Reihenfolge aufzulisten, in der ich denke, dass der Effekt aus Sicht des Entwicklers großartig ist. Wenn Sie in dieser Reihenfolge erklären, werden Sie es sicherlich verwenden wollen. Wenn Sie anderen Personen als Entwicklern die Nützlichkeit erklären, ist der Punkt, der aus Sicht des Projektmanagers "kurz geschrieben" werden kann, der Wartungsaufwand des Tests, und der Punkt, dass "Installation aus Sicht des Umgebungsmanagers unnötig ist", wird betont. Es kann ein Verdienst sein zu sein. Wir werden am Ende dieser Seite auch auf die Nutzung vorhandener CUnit-Assets eingehen.

・ (Vielleicht) Kann kürzer als CUnit geschrieben werden ・ Ich habe einen Testfall geschrieben, aber nie vergessen, ihn einzulegen ・ Kann ohne Installation verwendet werden ・ Keine Hauptfunktion erforderlich ・ Eine Liste von Testfällen kann ausgegeben werden ・ Es können nur bestimmte Tests ausgeführt werden ・ Setup- und TearDown-Funktionen können für jede Testsuite vorbereitet werden (streng als Testvorrichtung bezeichnet). -Der deaktivierte Test zeigt explizit "Wie viele Tests wurden deaktiviert" an, wenn der Test ausgeführt wird.

Das Folgende wird der Reihe nach erklärt.

(Vielleicht) Ich kann kürzer als CUnit schreiben, ich habe einen Testfall geschrieben, aber nie vergessen, ihn zu schreiben

CUnit muss nach dem Schreiben eines Testfalls eine AddSuite-ähnliche Verarbeitung hinzufügen. Es ist leicht, den Fehler zu machen, es versehentlich zu schreiben, aber nicht zu testen. Wenn Sie einen Testfall schreiben, wird er von Google Test automatisch in das Testziel aufgenommen.

Kann ohne Installation verwendet werden

Es enthält alle CPP-Dateien und -Header. Wenn Sie also die Einstellungen für den Include-Pfad und CPP in das Build-Ziel aufnehmen, können Sie es verwenden, ohne es in / usr / local / lib zu installieren. Nützlich, wenn Sie es ausprobieren und empfehlen möchten. Die detaillierte Methode wird in diesem Artikel erwähnt (http://d.hatena.ne.jp/E_Mattsan/20120215/1329311774), used-src ist jedoch derzeit nicht in der Release-Version enthalten, sodass Folgendes implementiert ist. Ich musste.

fuse_gtest_files.py

Natürlich können Sie es auch installieren und verwenden.

Hauptfunktion nicht erforderlich

Da GoogleTest es vorbereitet hat, können Sie es verwenden, indem Sie es einfach in das Build-Ziel aufnehmen.

Kann eine Liste von Testfällen ausgeben, kann nur bestimmte Tests ausführen

Siehe unten für Details. http://opencv.jp/googletestdocs/advancedguide.html#adv-listing-test-names http://opencv.jp/googletestdocs/advancedguide.html#adv-running-a-subset-of-the-tests

In CUnit habe ich Erfahrung damit, teilweise #if 0 zu verwenden und den Teil zu überladen, in dem der Testfall definiert ist.

Setup- und TearDown-Funktionen können für jede Testsuite vorbereitet werden (streng als Testvorrichtung bezeichnet).

Siehe unten für Details. http://opencv.jp/googletestdocs/primer.html#primer-test-fixtures

Welche Art von Initialisierung sollten die Testfälle in dieser Testsuite zuerst sein, welche Art von Bereinigung sollte durchgeführt werden? Ich denke, dass es einfacher zu lesen sein wird, weil Sie das in die Deklaration der Testsuite schreiben können.

Deaktivierte Tests zeigen beim Ausführen des Tests explizit "Wie viele Tests wurden deaktiviert" an.

Siehe unten für Details. http://opencv.jp/googletestdocs/advancedguide.html#adv-temporarily-disabling-tests

Wenn es #if 0 ist, kann es eines Tages vergessen werden. Im Fall von "Es wird NG sein, weil es jetzt nicht implementiert ist. Aber ich habe vorerst einen Test durchgeführt, deshalb möchte ich es testen, sobald es implementiert ist." Ich denke, es ist eine gute Idee, es auf "expliziten Invalidierungstest" zu setzen.

Fehler

Erfordert Kenntnisse in C ++, aber nur die Fähigkeit, Klassen zu definieren, und über rudimentäres Wissen wie externes "C". Ich kann mir keine Nachteile mit CUnit vorstellen.

Andere

Dinge, die beim Bauen stecken bleiben

-Notwendig, -lpthread anzugeben -Ich habe die CPP-Quelle mit gcc anstelle von g ++ erstellt

Welche Funktion soll ich verwenden?

Es scheint verschiedene nützliche Funktionen zu geben, aber wenn der Entwickler sie zu frei verwendet, werden knifflige Tests erstellt oder sie werden außer Kontrolle geraten. Ich denke, es ist gut zu entscheiden, welche Funktionen verwendet werden sollen und welche nicht.

Wie kann ich mit früheren CUnit-Assets koexistieren?

Was passiert mit Testfällen, die nach der Migration zu Google Test in CUnit geschrieben wurden? Wirfst du es weg? Ich denke, dass die Frage immer vom Manager gestellt wird. Aus der Schlussfolgerung ist es unmöglich, es mit null Arbeitskräften umzuleiten, aber es kann mit einer kleinen mechanischen Modifikation verwendet werden. Wenn Sie auch in Zukunft weitere Tests durchführen, können Sie erklären, dass es sich um eine Investition handelt, die sich durch die Steigerung der Produktionseffizienz amortisiert.

An den CUnit-basierten Testfällen müssen einige Änderungen vorgenommen werden. Ich werde im Detail schreiben, wenn es nötig ist, aber notiere, was ich getan habe.

Deaktivieren Sie Teile, die nur in CUnit benötigt werden

Löschen oder deaktivieren Sie die Hauptfunktion, AddSuite, AddTestCase-Verarbeitung usw.

Schreiben Sie Testfallfunktionen basierend auf Google Test neu

void testcase01(void){ Zu TEST(testcase01){ Oder TEST_F(testName, testcase01){

Dies wird abhängig von der Anzahl der Testfälle überlastet. Es ist eine mechanische Arbeit, also scheint es, dass Sie es mit einem Skript usw. tun können, aber wenn Sie sich dieser Ersatzarbeit nicht widmen können, geben Sie bitte auf ...

Ersetzen Sie Makros für CUnit durch GoogleTest-Makros

#define CU_ASSERT EXPECT_TRUE

Fügen Sie CUnit-Dateien aus CPP-Dateien für Google Test hinzu

#include "testCaseForCUnit.c"

Makefile neu schreiben

Für Google Test.

Schließlich

Ich habe es geschrieben, während ich dachte, dass es nicht nötig war, also denke ich, dass es einige Punkte gibt, die schwer zu verstehen sind. Gib mir einen Beispielcode! Ich werde es aktualisieren, wenn es so etwas gibt. Bitte vergib mir den ersten Beitrag ...

Recommended Posts

Zusammenfassung der Vor- und Nachteile beim Wechsel von CUnit zu Google Test
Zusammenfassung von vtkThreshold (von Zeit zu Zeit aktualisiert)
Zusammenfassung der gcc-Optionen (von Zeit zu Zeit aktualisiert)
Zu beachtende Punkte beim Wechsel von NAOqi OS 2.4.3 zu 2.5.5
Zusammenfassung der Testmethode
[Von Zeit zu Zeit aktualisiert] Zusammenfassung der Entwurfsmuster in Java
Beispielcode-Zusammenfassung bei der Arbeit mit Google-Tabellen von Google Colab
So vermeiden Sie doppelte Daten bei der Eingabe von Python in SQLite.
[Empfehlung] Zusammenfassung der Vor- und Nachteile der inhaltsbasierten und kooperativen Filter- / Implementierungsmethode
vtkXMLUnstructuredGridReader Zusammenfassung (von Zeit zu Zeit aktualisiert)
vtkOpenFOAMReader-Zusammenfassung (von Zeit zu Zeit aktualisiert)
Zusammenfassung der Verwendung von pandas.DataFrame.loc
Zusammenfassung der Verwendung von pyenv-virtualenv
Zusammenfassung der Verwendung von csvkit
Umgang mit OAuth2-Fehlern bei Verwendung von Google APIs aus Python
Wenn Sie den HTTP-Header des Testclients von Flask ändern möchten