Запускайте тесты Google для своих проектов C++
Тестирование программного обеспечения — это процесс оценки и подтверждения того, что программное приложение или продукт, использующий программные модули, работает должным образом. Тестирование имеет такие преимущества, как обнаружение ошибок, снижение затрат на разработку и, наконец, влияет на повышение производительности.
В следующей статье описаны простые шаги, позволяющие запустить GoogleTest в вашем проекте C++.
Исходный код этой статьи вы найдете на моем GitHub.
Я опишу метод, когда исходные файлы (googletest) находятся на вашей машине.
Для простоты я опишу настройку, которую вы можете найти на моем GitHub,
mkdir optimizer
Внутри оптимизированного репозитория клонов папок от Google,
cd optimizer git clone https://github.com/google/googletest
Создайте дополнительные папки, которые будут включать ваши файлы C++,
mkdir -p build src lib tests
Создайте CMakeFiles.txt,
touch CMakeFiles.txt
Для лучшего понимания того, как настроить CMakeLists.txt, рекомендую выдающийся репозиторий,
Ваше окончательное дерево оптимизатора папок будет выглядеть следующим образом:
Теперь мы создадим простую программу на C++, которая умножает числа.
Внутри папки src выполните,
touch main.cpp product.cpp
Внутри папки lib выполнить,
touch product.h
В файле main.cpp мы создаем объект p и вызываем два метода.
#include <iostream> #include "product.h" int main (){ Product p; auto c1 = p.computeA(10,20); auto c2 = p.computeB(10,20,30); std::cout << "c1=" << c1 << " c2=" << c2 << "\n"; }
Файлы product.cpp и product.h можно изобразить следующим образом:
//product.h #pragma once class Product { public: int computeA(int, int); int computeB(int, int, int); }; //product.cpp #include "product.h" int Product::computeA(int a, int b) { return a * b; } int Product::computeB(int a, int b, int c) { return a * b * c; }
Чтобы собрать наш проект (без GoogleTest), нам нужно подготовить простой файл CMakeList.txt, который мы создали ранее.
# $ cmake --version cmake_minimum_required(VERSION 3.5) # Set the project name project (optimizer) # add header files in the lib include_directories(lib) # Create a sources variable with a link to all cpp files to compile set(SOURCES src/main.cpp src/product.cpp ) # Add an executable with the above sources add_executable(run_opt ${SOURCES}) target_include_directories(run_opt PRIVATE ${PROJECT_SOURCE_DIR}/lib )
В вашем терминале
cd build cmake .. make ..
Вы можете запустить свою программу,
./run_opt
Теперь мы включим GoogleTest в наш проект и создадим простой тест, который проверяет нашу программу на C++.
Тесты, которые мы собираемся запустить для нашей программы, мы указываем в дополнительном файле, который мы можем создать в папке с тестами,
cd tests touch utest-product.cpp
После создания файла мы можем создать тест, который проверит производительность нашего программного обеспечения. Все доступные тесты вы найдете здесь. Я ограничил тест логическим сравнением.
#include "product.h" #include <gtest/gtest.h> // https://google.github.io/googletest/reference/assertions.html namespace { TEST(PersonTestSuite, functionA) { Product p; EXPECT_EQ(p.computeA(10, 20), 200); } TEST(PersonTestSuite, functionB) { Product p; EXPECT_EQ(p.computeB(10, 20, 30), 6000); } TEST(PersonTestSuite, not_equal_functionB) { Product p; EXPECT_NE(p.computeB(10, 20, 30), 5000); } TEST(PersonTestSuite, fun_B_greater_funA) { Product p; EXPECT_GT(p.computeB(10, 20, 30), p.computeA(10, 10)); } }
Если вы рассмотрите содержимое файла, вы заметите, что тест сравнивает выходные данные методов, вызываемых программой GTest.
Чтобы создать программу, которая тестирует ваши файлы C++ (вашу программу), вам нужно будет добавить определенные флаги в ваш файл CMakeList.txt (который вы создали ранее — я добавил поясняющие комментарии).
# $ cmake --version cmake_minimum_required(VERSION 3.5) # Set the project name project (optimizer) # add googletest subdirectory add_subdirectory(googletest) # this is so we can #include <gtest/gtest.h> include_directories(googletest/include) # add header files in the lib include_directories(lib) # Create a sources variable with a link to all cpp files to compile set(SOURCES src/main.cpp src/product.cpp ) # Add an executable with the above sources add_executable(run_opt ${SOURCES}) # Set the directories that should be included in the build command for this target target_include_directories(run_opt PRIVATE ${PROJECT_SOURCE_DIR}/lib ) enable_testing() add_executable(run_opt_test src/product.cpp tests/utest-product.cpp ) target_link_libraries(run_opt_test GTest::gtest_main) include(GoogleTest) gtest_discover_tests(run_opt_test )
Вы можете выступать снова,
cd build cmake .. make ..
и запустите свой тест,
./run_opt_test
Ожидаемый результат,
Спасибо за чтение.