Test de module multi-instance en langage C

Ecrire un test

Aperçu

Testez le code C avec google test. Ce code temporel.

Intro

J'ai fait un compteur l'autre jour, mais je ne sais pas si ça marche. Je vais donc essayer un test unitaire.

Structure du répertoire

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

Créer un test Google

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.

Essayez de compiler

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.

Écrire le code de test

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.

Résumé

Recommended Posts

Test de module multi-instance en langage C
Intégration du langage machine en langage C
Tri de tas fait en langage C
Essayez de créer un module Python en langage C
Ecrire un test piloté par table en C
Réaliser une classe d'interface en langage C
Segfo avec 16 caractères en langage C
Liste de liens (list_head / queue) en langage C
Comment utiliser Google Test en langage C
Générer un langage C à partir d'une expression S avec Python
Méthode de contrôle exclusive multi-processus en langage C
Configurer un serveur UDP en langage C
J'ai essayé d'ajouter un module Python 3 en C
Installez le module dépendant du langage C de python au format roue avec une construction en plusieurs étapes
J'ai fait un module en langage C qui filtre les images chargées par Python
Gérer les signaux en langage C
J'ai essayé d'utiliser google test et CMake en C
File d'attente ALDS1_3_B langage C
Accéder à MongoDB en C
Next Python en langage C
[Algorithme de langage C] Endianness
API C en Python 3
Aller à la langue pour voir et se souvenir du langage Partie 7 C en langage GO
J'ai essayé d'illustrer le temps et le temps du langage C
[Algorithme de langage C] bloquer le mouvement
Étendre python en C ++ (Boost.NumPy)
Recherche binaire ALDS1_4_B langage C
Algorithme en Python (jugement premier)
Utiliser des expressions régulières en C
Imiter Numpy de Python en C #
Recherche binaire en Python / C ++
Hello World en langue GO
Cela peut-il être fait en 1 minute? Aucune installation requise, exemple de test Google pour le langage C pour Linux
[Langage C] readdir () vs readdir_r ()
Module de débogage et de test Python
Recherche linéaire ALDS1_4_A en langage C
Arborescence de surface totale minimale en C #
Définir le test python dans jenkins
Introduction à l'API Socket apprise en langage C, partie 1, édition serveur