[GO] Modultest mit mehreren Instanzen in C-Sprache

Schreiben Sie einen Test

Überblick

Testen Sie den C-Code mit Google Test. Dieser Zeitcode.

Intro

Ich habe neulich einen Zähler gemacht, aber ich weiß nicht, ob es funktioniert. Also werde ich einen Unit-Test versuchen.

Verzeichnisaufbau

.
├── counter
│   ├── build
│   ├── makefile
│   ├── src
│   └── tests
└── googletest
     ├── CMakeLists.txt
     ├── README.md
     ├── appveyor.yml
     ├── googlemock
     ├── googletest
     └── travis.sh

Erstellen Sie einen Google-Test

Das Testkabel verwendet googletest. Zuerst Git-Klon. Ich füge oft Git-Submodule in Git-verwalteten Projekten hinzu.

git clone https://github.com/google/googletest.git

Es enthält Googletest und Googlemock, aber bauen Sie vorerst nur den Googletest, den Sie benötigen.

cd googletest/googletest
mkdir build
cd build
cmake ..
make

Es werden zwei Dateien generiert, libgtest.a und libgtest_main.a.

Versuchen Sie zu kompilieren

Versuchen Sie vor dem Schreiben des Testcodes, ihn zu kompilieren und auszuführen.

cd counter
gcc -c -o build/counter.o src/counter.c
g++ -o build/unitetest -Isrc -I../googletest/googletest/include tests/test_counter.cpp build/counter.o -L../googletest/googletest/build -lgtest_main -lgtest -lpthread
build/unitetest

Das Ausführungsergebnis ist

Running main() from gtest_main.cc
[==========] Running 0 tests from 0 test cases.
[==========] 0 tests from 0 test cases ran. (1 ms total)
[  PASSED  ] 0 tests.

Es wird sein.

Testcode schreiben

Nachdem wir es ausgeführt haben, schreiben Sie den Testcode.

mkdir tests
vim tests/test_counter.cpp
//tests/test_counter.cpp
#include "gtest/gtest.h"

extern "C" {
#include "counter.h"
}

TEST(counterTest, count) {
    Counter testCounter;
    testCounter = Counter_Create();
    Counter_CountUp(testCounter);
    ASSERT_EQ(0, Counter_GetCount(testCounter));
}

Ich werde es versuchen. Die Hauptfunktion ist in gtest_main enthalten, das in die Bibliothek geladen wird, und führt automatisch die vom TEST () -Makro erstellte Testfunktion aus.

gcc -c -o build/counter.o src/counter.c
g++ -o build/unitetest -Isrc -I../googletest/googletest/include tests/test_counter.cpp build/counter.o -L../googletest/googletest/build -lgtest_main -lgtest -lpthread
build/unitetest

Ist das Ergebnis

Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from counterTest
[ RUN      ] counterTest.count
tests/test_counter.cpp:11: Failure
Expected: 0
To be equal to: Counter_GetCount(testCounter)
Which is: 1
[  FAILED  ] counterTest.count (0 ms)
[----------] 1 test from counterTest (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[  PASSED  ] 0 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] counterTest.count

Ich versage. Ich dachte, dass Counter_GetCount (testCounter) 0 zurückgeben würde, aber in Wirklichkeit gab es 1 zurück, also war es ein Fehler. Schreiben Sie es wie folgt um und versuchen Sie es erneut.

ASSERT_EQ(1, Counter_GetCount(testCounter));
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from counterTest
[ RUN      ] counterTest.count
[       OK ] counterTest.count (0 ms)
[----------] 1 test from counterTest (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[  PASSED  ] 1 test.

Erfolgreich.

Zusammenfassung

Recommended Posts

Modultest mit mehreren Instanzen in C-Sprache
Einbettung der Maschinensprache in die Sprache C.
Heap-Sortierung in C-Sprache
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
Schreiben Sie einen tabellengesteuerten Test in C.
Realisieren Sie die Schnittstellenklasse in der Sprache C.
Segfo mit 16 Zeichen in C-Sprache
Linkliste (list_head / queue) in C-Sprache
Verwendung von Google Test in C-Sprache
Generieren Sie mit Python eine C-Sprache aus dem S-Ausdruck
So steuern Sie Multiprozesse ausschließlich in C-Sprache
Richten Sie einen UDP-Server in der Sprache C ein
Ich habe versucht, ein Python 3-Modul in C hinzuzufügen
Installieren Sie das C-sprachabhängige Modul von Python im Wheel-Format mit mehrstufigem Build
Ich habe ein Modul in C-Sprache erstellt, das von Python geladene Bilder filtert
Verarbeiten Sie Signale in C-Sprache
Ich habe versucht, Google Test und CMake in C zu verwenden
C-Sprache ALDS1_3_B Warteschlange
Greifen Sie auf MongoDB in C zu
Weiter Python in C-Sprache
[C-Sprachalgorithmus] Endianness
C-API in Python 3
Gehen Sie in die Sprache, um Teil 7 C in der Sprache GO zu sehen und sich daran zu erinnern
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
[C-Sprachalgorithmus] Blockbewegung
Erweitern Sie Python in C ++ (Boost.NumPy)
C-Sprache ALDS1_4_B Binäre Suche
Algorithmus in Python (Haupturteil)
Verwenden Sie reguläre Ausdrücke in C.
Nachahmung von Pythons Numpy in C #
Binäre Suche in Python / C ++
Hallo Welt in GO-Sprache
Kann es in 1 Minute erledigt werden? Keine Installation erforderlich, Google Test-Beispiel für C-Sprache für Linux
[C Sprache] readdir () vs readdir_r ()
Python-Debug- und Testmodul
C-Sprache ALDS1_4_A Lineare Suche
Minimaler Gesamtflächenbaum in C #
Stellen Sie den Python-Test in Jenkins ein
Einführung in die in C Language Part 1 Server Edition erlernte Socket-API