Je souhaite créer un projet Bazel C++ avec gtest pour les tests unitaires.Projet C++ avec Bazel et GTest
Quelle est la configuration minimale?
(je ne l'ai Bazel installé sur mon ordinateur et je suis sous Linux)
Je souhaite créer un projet Bazel C++ avec gtest pour les tests unitaires.Projet C++ avec Bazel et GTest
Quelle est la configuration minimale?
(je ne l'ai Bazel installé sur mon ordinateur et je suis sous Linux)
La structure du projet est:
.
├── bin
│ ├── BUILD
│ ├── hello.cpp
├── MyLib
│ ├── BUILD
│ ├── message.hpp
│ ├── message.cpp
│ ├── ...
├── test
│ ├── BUILD
│ ├── message_test.cpp
│ ├── ...
├── gmock.BUILD
└── WORKSPACE
fichiers liés à Bazel + gtest
Il télécharger gtest de github:
new_git_repository(
name = "googletest",
build_file = "gmock.BUILD",
remote = "https://github.com/google/googletest",
tag = "release-1.8.0",
)
Vous définissez un fichier BUILD gmock défini ci-dessous:
Ce fichier BUILD est responsable de compilation gtest/gmock:
cc_library(
name = "gtest",
srcs = [
"googletest/src/gtest-all.cc",
"googlemock/src/gmock-all.cc",
],
hdrs = glob([
"**/*.h",
"googletest/src/*.cc",
"googlemock/src/*.cc",
]),
includes = [
"googlemock",
"googletest",
"googletest/include",
"googlemock/include",
],
linkopts = ["-pthread"],
visibility = ["//visibility:public"],
)
cc_library(
name = "gtest_main",
srcs = ["googlemock/src/gmock_main.cc"],
linkopts = ["-pthread"],
visibility = ["//visibility:public"],
deps = [":gtest"],
)
Ce fichier de construction générer des tests:
cc_test(
name = "MyTest",
srcs = glob(["**/*.cpp"]),
deps = ["//MyLib:MyLib",
"@googletest//:gtest_main"],
)
Le fichier test /de message_test.cpp est défini par:
#include "gtest/gtest.h"
#include "MyLib/message.hpp"
TEST(message_test,content)
{
EXPECT_EQ(get_message(),"Hello World!");
}
Et c'est tout! Les autres fichiers sont définis comme d'habitude:
fichiers pour l'exemple de soutien
Crée le libMyLib.so et libMyLib.a bibliothèques .
cc_library(
name="MyLib",
hdrs=glob(["**/*.hpp"]),
srcs=glob(["**/*.cpp"]),
visibility = ["//visibility:public"],
)
avec un de base message.hpp
#include <string>
std::string get_message();
et le message .cpp
#include "MyLib/message.hpp"
std::string get_message()
{
return "Hello World!";
}
exemple.
Crée le bonjour exécutable.
cc_binary(
name = "hello",
srcs = ["hello.cpp"],
deps = ["//MyLib:MyLib"],
)
qui est:
#include "MyLib/message.hpp"
#include <iostream>
int main()
{
std::cout << "\n" << get_message() << std::endl;
return EXIT_SUCCESS;
}
Utilisation:
Cela permettra également télécharger gtest de son repo et compiler github il
bazel build ...
Vous pouvez l'exécuter avec:
bazel run bin:hello
qui a été le principal point de cette note:
bazel test ... --test_output=errors
Vous devriez obtenir quelque chose comme:
INFO: Analysed 3 targets (0 packages loaded).
INFO: Found 2 targets and 1 test target...
INFO: Elapsed time: 0.205s, Critical Path: 0.05s
INFO: Build completed successfully, 2 total actions
//test:MyTest
PASSED in 0.0s
Executed 1 out of 1 test: 1 test passes.
Reproduire les résultats
Pour votre facilité, j'ai créé un github repo contenant cet exemple. J'espère que cela fonctionne hors de la boîte.
Si vous avez également besoin de fichiers de données pour vos tests, https://stackoverflow.com/questions/46100906/c-bazel-project-with-a-data-repository explique comment gérer cela. –