Testez le code C avec google test. Ce code temporel.
J'ai fait un compteur l'autre jour, mais je ne sais pas si ça marche. Je vais donc essayer un test unitaire.
.
├── counter
│ ├── build
│ ├── makefile
│ ├── src
│ └── tests
└── googletest
├── CMakeLists.txt
├── README.md
├── appveyor.yml
├── googlemock
├── googletest
└── travis.sh
Le harnais de test utilise googletest. Tout d'abord, git clone. Je fais souvent des ajouts de sous-modules git dans des projets gérés par git.
git clone https://github.com/google/googletest.git
Il comprend googletest et googlemock, mais pour l'instant, ne créez que le googletest dont vous avez besoin.
cd googletest/googletest
mkdir build
cd build
cmake ..
make
Deux fichiers seront générés, libgtest.a et libgtest_main.a.
Avant d'écrire le code de test, essayez de le compiler et de l'exécuter.
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
Le résultat de l'exécution est
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.
Ce sera.
Maintenant que nous l'avons exécuté, écrivez le code de test.
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));
}
Je vais essayer. La fonction main est incluse dans gtest_main chargé dans la bibliothèque et exécute automatiquement la fonction de test créée par la macro TEST ().
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
Est le résultat
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
J'échoue. Je pensais que Counter_GetCount (testCounter) renverrait 0, mais en réalité, il a renvoyé 1, donc c'était un échec. Réécrivez-le comme suit et réessayez.
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.
Réussi.
Recommended Posts