Tout d'abord, je m'excuse pour l'expression exagérée du titre. .. ..
http://qiita.com/igayu/items/eaa63d017e0590504999 J'ai mentionné les bons points de Google Test pour les développeurs C, mais essayons-le la prochaine fois, j'ai donc préparé un échantillon raisonnable. Il semble que GoogleTest lui-même fournit un exemple de code, mais certaines personnes n'ont pas envie de le lire car il est en anglais, par exemple comment le créer s'ils n'y sont pas habitués. Si vous le réduisez à ce bon sens et à l'étude, votre travail ne tournera pas. Je vais pousser un peu plus mon dos pour ceux qui pensent que Google Test semble être utile.
L'exemple présenté ici est écrit sur les hypothèses suivantes.
・ C pour les développeurs de langage C++Ne touchez pas à la grammaire de
· Basé sur Linux gcc(J'ai CentOS 6 avec vmware sur Windows 7.Utilisez 7 comme système d'exploitation virtuel)
・ Laissez l'essentiel minimum important de Google Test que je pense(J'écrirai la prochaine étape dans un autre article)
・ Bien que ce ne soit pas pour les super amateurs, il est censé être assez difficile à comprendre pour quiconque ayant une connaissance de base de Linux et du C.
・ Obtenez Google Test et décompressez-le. https://github.com/google/googletest/releases De googletest-release-1.8.0.zip cette fois (dernière version au moment de la rédaction). -Créez target.c, target.h, test.cpp et Makefile sous forme de fichiers vides.
En résumé, il a la configuration suivante.
C:\Users\xxx\Desktop\gtestSample
googletest-release-1.8.0 (annuaire)
Makefile (Fichier vide)
target.c (Fichier vide)
target.h (Fichier vide)
test.cpp (Fichier vide)
Je vais mettre l'exemple de code, donc copiez-le dans un fichier vide tel quel, créez-le et déplacez-le. Si vous êtes en mesure de recommander à d'autres, je pense qu'il est préférable de faire la configuration ci-dessus pour qu'elle fonctionne et que les autres touchent l'environnement.
Copiez le contenu de target.c, target.c, target.h, test.cpp et Makefile ci-dessous dans le fichier vide créé.
target.c
//Fonction à tester
//Renvoie 0 si 0 est entré, 1 sinon
int function(int a){
if (a == 0){
return 0;
} else {
return 1;
}
}
target.h
//Déclaration prototype de la fonction testée
#ifndef _TARGET_H_
#define _TARGET_H_
int function(int a);
#endif /* _TARGET_H_ */
test.cpp
//Fichier de description de cas de test
#include "gtest/gtest.h" //C'est tout ce que vous avez à faire avec googleTest
//Je souhaite pouvoir appeler la fonction testée
// extern "C"Sans cela, il n'est pas interprété comme C et a tendance à créer une dépendance étonnante.
extern "C" {
#include "target.h"
}
//fixtureName peut être considéré comme un nom de groupe qui regroupe les cas de test, toute chaîne de caractères
//Autres classes-tests::Je pense que ce n'est pas magique jusqu'à Test
class fixtureName : public ::testing::Test {
protected:
//Cas de test regroupés par fixtureName avant d'exécuter chaque scénario de test
//Appelez cette fonction. Le code de test sera plus propre si vous incluez un processus d'initialisation commun.
virtual void SetUp(){
}
//Une fonction appelée après l'exécution d'un cas de test tel que SetUp. Décrivez le nettoyage courant.
virtual void TearDown(){
}
};
//Un cas de test réussi. Consultez le manuel Google Test pour une explication détaillée.
TEST_F(fixtureName, testOk)
{
EXPECT_EQ(0, function(0));
EXPECT_EQ(1, function(100));
}
//Écrivez un cas de test qui ose échouer.
TEST_F(fixtureName, testNg)
{
EXPECT_EQ(1, function(0));
EXPECT_EQ(0, function(100));
}
# Makefile
# all:Retrait dans les trois lignes inférieures,
# gtest-gen:Une ligne sous le retrait
#Est vide, mais veuillez utiliser un onglet
# target.Puisque c est C, c'est gcc, sinon C++Alors g++Construire avec
# gtest_main.cc est la fonction principale fournie par Google Test,
# gtest-all.cc est un fichier contenant tous les tests Google
# -Notez également que lpthread est attaché.
#Après avoir créé ou créé tout, créez et exécutez.
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 ./
Au stade de la préparation, vous pouvez le faire sur un PC Windows, mais à partir de maintenant, il est supposé que vous travaillerez sous Linux.
cd <Annuaire avec échantillons>/gtestSample
make gtest-gen
Certains fichiers sont crachés dans gtestSample / gtest. Ce que vous faites est comme dans Makefile python googletest-release-1.8.0 / googletest / scripts / fuse_gtest_files.py. /
Comme vous pouvez le voir, exécutez fuse_gtest_files.py et obtenez la sortie dans le répertoire courant./ Laissez
cracher (peut-être êtes-vous accro à la présence / absence et à la version de python). Voyez plus tard ce qui sera fait. Puisque vous pouvez créer un énorme fichier C contenant toutes les fonctions de Google Test, vous pouvez le compiler avec votre propre code de test sans créer de bibliothèque.
C'est l'une des motivations pour moi de recommander vivement Google Test. Vous n'avez pas besoin de faire l'installation en tant que root, et le test ne sera pas exécuté sur le PC de cette personne même s'il est installé sur le PC de cette personne.
cd <Annuaire avec échantillons>/gtestSample
make
c'est tout. Deux cas de test doivent être exécutés, un PASS et un NG (n'oubliez pas de remplacer les blancs par des onglets comme je l'ai écrit dans les commentaires du Makefile). Vous pouvez comprendre intuitivement comment lire le journal sans aucune explication particulière.
Vous pouvez écrire le cas de test avec TEST (), mais osez écrire le cas de test uniquement avec TEST_F (). Les tests fonctionnels expérimentés ne se terminent pas par un cas de test, et si vous créez deux cas de test ou plus, vous pouvez effectuer un prétraitement et un post-traitement courants avec une probabilité élevée. De plus, le code de test dans lequel TEST () et TEST_F () sont mélangés est difficile à voir. Mon équipe utilise donc uniquement TEST_F ().
Sauf pour la préparation, si vous vous habituez au processus de la création du fichier à l'exécution, cela prendra 1 minute! (= ʻE '=) ゞ Sur la base de cet exemple, j'ajouterai les fonctions qui peuvent être utilisées par Google Test (par exemple, désactiver temporairement le cas de test), mais je suis paresseux, donc un jour ...
Recommended Posts