Testen Sie den C-Code mit Google Test. Dieser Zeitcode.
Ich habe neulich einen Zähler gemacht, aber ich weiß nicht, ob es funktioniert. Also werde ich einen Unit-Test versuchen.
.
├── counter
│ ├── build
│ ├── makefile
│ ├── src
│ └── tests
└── googletest
├── CMakeLists.txt
├── README.md
├── appveyor.yml
├── googlemock
├── googletest
└── travis.sh
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 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.
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.
Recommended Posts