https://github.com/thebeachmaster/gtest
Build and Test C++ libraries with Google Test Framework
https://github.com/thebeachmaster/gtest
Last synced: 1 day ago
JSON representation
Build and Test C++ libraries with Google Test Framework
- Host: GitHub
- URL: https://github.com/thebeachmaster/gtest
- Owner: TheBeachMaster
- License: apache-2.0
- Created: 2018-04-27T11:25:40.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-04-27T12:44:21.000Z (about 8 years ago)
- Last Synced: 2026-02-20T11:09:32.666Z (4 months ago)
- Language: C++
- Size: 1.01 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# gtest
Build and Test C++ libraries with Google Test Framework
> This repo should provide a basic understanding of how to use Google Test Framework, and Linking libraries using CMake Build tool
> Build Status
[](https://travis-ci.org/TheBeachMaster/gtest/)
> Basics
- CMakeList
CMake Configuration
```text
# CMake Version
cmake_minimum_required(VERSION 2.8)
# Project Name
project(MathFunc CXX)
# Build for Release
set(CMAKE_BUILD_TYPE Release)
message(WARNING "A ${CMAKE_BUILD_TYPE} build configuration is detected")
# Where to throw Binaries
set(CMAKE_LIBRARY_DIR ${CMAKE_SOURCE_DIR}/lib)
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/out)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_LIBRARY_DIR})
# Add directories
set(PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/lib)
include_directories("${PROJECT_INCLUDE_DIR}")
include_directories("${PROJECT_SOURCE_DIR}")
# Optional args for running Google Test
option (DO_TEST "Run Google Test" OFF)
# Add Source Files
set(PROJECT_SRCS ${PROJECT_SOURCE_DIR}/src/main.cc )
# Add Library Source Files
set(LIB_SRC ${PROJECT_SOURCE_DIR}/lib/mymathfunc.cc )
# Build shared Libs
add_library(${PROJECT_NAME}_shared SHARED ${LIB_SRC})
set(SHARED_LIB ${PROJECT_NAME}_shared)
# Build static Libs
add_library(${PROJECT_NAME}_static STATIC ${LIB_SRC})
set(STATIC_LIB ${PROJECT_NAME}_static)
# Fix symbol visibility
include(GenerateExportHeader)
GENERATE_EXPORT_HEADER(${SHARED_LIB}
BASE_NAME ${SHARED_LIB}
EXPORT_MACRO_NAME ${SHARED_LIB}_EXPORTS
EXPORT_FILE_NAME ${SHARED_LIB}_EXPORTS.h
STATIC_DEFINE SHARED_EXPORTS_BUILT_AS_STATIC)
if(DO_TEST)
include_directories("${PROJECT_SOURCE_DIR}/include/googletest/googletest/include")
add_subdirectory(include/googletest)
set(TEST_LIBS_FLAGS ${CMAKE_LIBRARY_DIR}/libgtest_main.a m gtest pthread ${SHARED_LIB})
add_executable(test_mathfunc
${PROJECT_SOURCE_DIR}/test/test_mymathfunc.cc)
add_dependencies(test_mathfunc gtest_main)
target_link_libraries(test_mathfunc ${TEST_LIBS_FLAGS})
endif (DO_TEST)
# Build Exec
add_executable(${PROJECT_NAME}_st ${PROJECT_SRCS})
target_link_libraries(${PROJECT_NAME}_st ${STATIC_LIB})
add_executable(${PROJECT_NAME}_sh ${PROJECT_SRCS})
target_link_libraries(${PROJECT_NAME}_sh ${SHARED_LIB})
```
- Library
Sample Library File
```c++
#include "mymathfunc.hpp"
double MyMathFunc::add(double a, double b)
{
return a + b;
}
double MyMathFunc::multiply(double a, double b)
{
return a * b;
}
double MyMathFunc::divide(double a, double b)
{
return a / b;
}
double MyMathFunc::subtract(double a, double b)
{
return a - b;
}
double MyMathFunc::square(double a)
{
return a * a;
}
```
```c++
#ifndef MYMATHFUNC_H
#define MYMATHFUNC_H
class MyMathFunc
{
public:
MyMathFunc(){}
static double add(double a, double b);
static double subtract(double a, double b);
static double multiply(double a, double b);
static double divide(double a, double b);
static double square(double a);
};
#endif // !MYMATHFUNC_H
```
- Test
Test Cases
```c++
#include "../lib/mymathfunc.hpp"
#include
#include
#include
using namespace std;
MyMathFunc func_test;
class MyMathFuncTest : public ::testing::Test {
protected:
virtual void SetUp() { }
virtual void TearDown() {}
public:
static const double a = 47.98;
static const double b = 18.25;
};
TEST_F(MyMathFuncTest, test_addition)
{
EXPECT_DOUBLE_EQ(66.23,func_test.add(a, b));
}
TEST_F(MyMathFuncTest, test_subtraction)
{
EXPECT_DOUBLE_EQ(29.73,func_test.subtract(a, b));
}
TEST_F(MyMathFuncTest, test_division)
{
EXPECT_NEAR(2.62904, func_test.divide(a, b), 0.0000011);
}
TEST_F(MyMathFuncTest, test_multiply)
{
EXPECT_DOUBLE_EQ(875.635,func_test.multiply(a, b));
}
TEST_F(MyMathFuncTest, test_square)
{
EXPECT_DOUBLE_EQ(2302.0804,func_test.square(a));
EXPECT_DOUBLE_EQ(333.0625,func_test.square(b));
}
int main(int argc, char * argv[])
{
/*The method is initializes the Google framework and must be called before RUN_ALL_TESTS */
::testing::InitGoogleTest(&argc, argv);
/*RUN_ALL_TESTS automatically detects and runs all the tests defined using the TEST macro.
It's must be called only once in the code because multiple calls lead to conflicts and,
therefore, are not supported.
*/
return RUN_ALL_TESTS();
}
```
- App file
Application File
```c++
#include
#include
#include "../lib/mymathfunc.hpp"
using namespace std;
MyMathFunc func;
int main()
{
double a = 19.85;
double b = 8.91;
cout << "a + b = " <<
func.add(a, b) << endl;
cout << "a - b = " <<
func.subtract(a, b) << endl;
cout << "a * b = " <<
func.multiply(a, b) << endl;
cout << "a / b = " <<
func.divide(a, b) << endl;
cout << "a * a = " <<
func.square(a) << endl;
return 0;
}
```