Kann es in 1 Minute erledigt werden? Keine Installation erforderlich, Google Test-Beispiel für C-Sprache für Linux

Zunächst entschuldige ich mich für den übertriebenen Ausdruck im Titel. .. ..

http://qiita.com/igayu/items/eaa63d017e0590504999 Ich habe die guten Punkte von Google Test für C-Entwickler erwähnt, aber versuchen wir es beim nächsten Mal, also habe ich ein vernünftiges Beispiel vorbereitet. Es scheint, dass GoogleTest selbst Beispielcode bereitstellt, aber einige Leute haben keine Lust, ihn zu lesen, weil er auf Englisch ist, z. B. wie man ihn erstellt, wenn sie nicht daran gewöhnt sind. Wenn Sie es auf so viel gesunden Menschenverstand reduzieren und studieren, wird sich Ihre Arbeit nicht ändern. Ich werde mich für diejenigen, die Google Test für nützlich halten, etwas mehr zurücklehnen.

Das hier vorgestellte Beispiel basiert auf den folgenden Annahmen.

・ C für C-Sprachentwickler++Berühren Sie nicht die Grammatik von
· Linux gcc basiert(Ich habe CentOS 6 mit VMware unter Windows 7.Verwenden Sie 7 als virtuelles Betriebssystem)
・ Lassen Sie die minimale wichtige Essenz von Google Test, die ich denke(Ich werde den nächsten Schritt in einem anderen Artikel schreiben)
・ Obwohl es nicht für Superamateure ist, soll es für jeden mit Grundkenntnissen in Linux und C schwierig genug sein, es zu verstehen.

Vorbereitung

・ Holen Sie sich Google Test und entpacken Sie es. https://github.com/google/googletest/releases Diesmal von googletest-release-1.8.0.zip (neueste Version zum Zeitpunkt des Schreibens).

Zusammenfassend hat es die folgende Konfiguration.

C:\Users\xxx\Desktop\gtestSample
        googletest-release-1.8.0 (Verzeichnis)
        Makefile (Leere Akte)
        target.c (Leere Akte)
        target.h (Leere Akte)
        test.cpp (Leere Akte)

Ich werde den Beispielcode einfügen, also kopiere ihn in eine leere Datei, mache ihn und verschiebe ihn. Wenn Sie in der Lage sind, anderen zu empfehlen, ist es meiner Meinung nach besser, die obige Konfiguration so vorzunehmen, dass sie funktioniert und andere die Umgebung berühren.

Erstellen Sie eine Datei

Kopieren Sie den Inhalt von target.c, target.c, target.h, test.cpp und Makefile in die erstellte leere Datei.

target.c


//Zu testende Funktion
//Gibt 0 zurück, wenn 0 eingegeben wird, andernfalls 1
int function(int a){
    if (a == 0){
        return 0;
    } else {
        return 1;
    }
}

target.h


//Prototypdeklaration der zu testenden Funktion
#ifndef _TARGET_H_
#define _TARGET_H_

int function(int a);

#endif /* _TARGET_H_ */

test.cpp


//Testfallbeschreibungsdatei
#include "gtest/gtest.h" //Dies ist alles, was Sie mit googleTest tun müssen
//Ich möchte die zu testende Funktion aufrufen können
// extern "C"Ohne es wird es nicht als C interpretiert und macht überraschend süchtig.
extern "C" {
#include "target.h"
}

//fixtureName kann als Gruppenname betrachtet werden, der Testfälle und beliebige Zeichenfolgen gruppiert
//Andere Klassenprüfungen::Ich denke, es ist keine Magie bis zum Test
class fixtureName : public ::testing::Test {
protected:
    //Testfälle, gruppiert nach fixtureName, bevor jeder Testfall ausgeführt wird
    //Rufen Sie diese Funktion auf. Der Testcode wird sauberer, wenn Sie einen allgemeinen Initialisierungsprozess einschließen.
    virtual void SetUp(){
    }
    //Eine Funktion, die nach dem Ausführen eines Testfalls wie SetUp aufgerufen wird. Beschreiben Sie die allgemeine Bereinigung.
    virtual void TearDown(){
    }
};

//Ein erfolgreicher Testfall. Eine ausführliche Erklärung finden Sie im Google Test-Handbuch.
TEST_F(fixtureName, testOk)
{
    EXPECT_EQ(0, function(0));
    EXPECT_EQ(1, function(100));
}
//Schreiben Sie einen Testfall auf, der es zu scheitern wagt.
TEST_F(fixtureName, testNg)
{
    EXPECT_EQ(1, function(0));
    EXPECT_EQ(0, function(100));
}
# Makefile
# all:Einrückungen in den unteren drei Zeilen,
# gtest-gen:Eine Zeile unter dem Einzug
#Ist leer, aber bitte verwenden Sie eine Registerkarte
# target.Da c C ist, ist es gcc, andernfalls C.++Wie G++Bauen mit
# gtest_main.cc ist die Hauptfunktion von Google Test.
# gtest-all.cc ist eine Datei, die alle Google-Tests enthält
# -Beachten Sie auch, dass lpthread beigefügt ist.
#Nach make oder make all erstellen und ausführen.
all:
	gcc -c target.c
	g++ test.cpp googletest-release-1.8.0/googletest/src/gtest_main.cc gtest/gtest-all.cc -I. -lpthread target.o 
	./a.out

gtest-gen:
	python googletest-release-1.8.0/googletest/scripts/fuse_gtest_files.py ./

Installieren Sie Google Test (alternativ)

In der Vorbereitungsphase können Sie es auf einem Windows-PC erstellen. Von nun an wird davon ausgegangen, dass Sie unter Linux arbeiten.

cd <Verzeichnis mit Beispielen>/gtestSample
make gtest-gen

Einige Dateien werden in gtestSample / gtest ausgespuckt. Wie Sie sehen können, führen Sie fuse_gtest_files.py aus und führen Sie die Ausgabe im aktuellen Verzeichnis aus. Lassen Sie `spucken (vielleicht sind Sie süchtig nach der Anwesenheit / Abwesenheit und Version von Python). Sehen Sie später, was getan wird. Da Sie eine große C-Datei mit allen Funktionen von Google Test erstellen können, können Sie diese mit Ihrem eigenen Testcode kompilieren, ohne eine Bibliothek zu erstellen. Dies ist eine der Motive für mich, Google Test nachdrücklich zu empfehlen. Sie müssen die Installation nicht als Root durchführen, und der Test wird nicht auf dem PC dieser Person ausgeführt, obwohl er auf dem PC dieser Person installiert ist.

Lauf

cd <Verzeichnis mit Beispielen>/gtestSample
make

das ist alles. Es sollten zwei Testfälle ausgeführt werden, ein PASS und ein NG (vergessen Sie nicht, die Leerzeichen durch Tabulatoren zu ersetzen, wie ich in den Kommentaren im Makefile geschrieben habe). Sie können intuitiv verstehen, wie das Protokoll ohne besondere Erklärung gelesen wird.

Engagement

Sie können den Testfall mit TEST () schreiben, aber es wagen, den Testfall nur mit TEST_F () zu schreiben. Erfahrene Funktionstests enden nicht mit einem Testfall. Wenn Sie zwei oder mehr Testfälle erstellen, können Sie mit hoher Wahrscheinlichkeit eine gemeinsame Vor- und Nachbearbeitung durchführen. Auch der Testcode, in dem TEST () und TEST_F () gemischt sind, ist schwer zu erkennen. Mein Team verwendet also nur TEST_F ().

Schließlich

Mit Ausnahme der Vorbereitung dauert es 1 Minute, wenn Sie sich an den Prozess von der Dateierstellung bis zur Ausführung gewöhnen! (= `E '=) ゞ Anhand dieses Beispiels werde ich die Funktionen hinzufügen, die von Google Test verwendet werden können (z. B. den Testfall vorübergehend deaktivieren), aber ich bin faul, also eines Tages ...

Recommended Posts

Kann es in 1 Minute erledigt werden? Keine Installation erforderlich, Google Test-Beispiel für C-Sprache für Linux
Morphologische Analyse und tfidf (mit Testcode), die in ca. 1 Minute durchgeführt werden können
Modultest mit mehreren Instanzen in C-Sprache
Richtlinien für die Reinkarnation in der Welt der Linux-Programmierentwicklung (C / C ++ - Sprache)
Verwendung von Google Test in C-Sprache
Es kann in 1 Minute erreicht werden! Ein Dekorator, der die Funktionsausführung zwischenspeichert, führt zu einem Memcached