GTest + vscode 實現(xiàn) C++ 單元測試
本文將介紹如何以源碼的形式在 vscode 中使用 googletest,重點在于目錄結(jié)構(gòu)與 CMakeLists.txt 的創(chuàng)建,不涉及如何在 vscode 中使用 CMake 進行構(gòu)建與生成。目標(biāo)是將生產(chǎn)代碼與測試代碼分離,保持代碼環(huán)境整潔。
創(chuàng)建項目 gtestVscodeEx,目錄結(jié)構(gòu)如下:
gtestVscodeEx
│ CMakeLists.txt
│
└───include
│ │ test.h
│
└───src
│ │ main.cpp
│ │ test.cpp
│
└───tests
│ │ googletest-master
│ │ CMakeLists.txt
│ │ test0.cpp
上述 include 與 src 中為生產(chǎn)代碼,tests 中為測試代碼與 gtest 源碼。
其中,test.h 內(nèi)容如下:
#include <iostream>
class TestClass
{
private:
int var;
public:
TestClass();
~TestClass();
int GetVar();
};
test.cpp 內(nèi)容如下:
#include "test.h"
TestClass::TestClass()
{
var = 1;
}
TestClass::~TestClass()
{
}
int TestClass::GetVar()
{
return var;
}
單元測試 test0.cpp 內(nèi)容如下:
#include "test.h"
#include "gtest/gtest.h"
TEST(TESTCASE, test0)
{
EXPECT_EQ(0, 0);
EXPECT_EQ("a", "a");
}
TEST(TESTCASE, test1)
{
TestClass tmp;
EXPECT_EQ(1, tmp.GetVar());
}
主目錄下的 CMakeLists.txt 內(nèi)容如下:
# cmake version require
cmake_minimum_required(VERSION 3.0.0)
# assign cpp standard
set(CMAKE_CXX_COMPILER "c++")
set(CMAKE_CXX_FLAGS "-std=c++11")
# set project name and version
project(gtestTest VERSION 0.1.0)
# add include and src path
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
# file to compile
add_executable(${PROJECT_NAME} src/main.cpp)
# add cpp as lib
add_library(libTest src/test.cpp)
# for gtest, included in tests sub-folder
enable_testing()
add_subdirectory(tests)
tests/CMakeLists.txt 的內(nèi)容如下:
include(CTest)
# set test build target name
set(TEST_BINARY ${PROJECT_NAME}_test)
# add new test
add_executable(${TEST_BINARY} test0.cpp)
# add googletest subdirectory
add_subdirectory(googletest-master)
# this is so we can #include <gtest/gtest.h>
include_directories(googletest-master/include)
add_test(test_1 tests/test0.cpp)
# link libraries to use in this executable
# link gtest_main to avoid your own main.cpp
target_link_libraries(${TEST_BINARY} PUBLIC libTest gtest gtest_main)
按照此結(jié)構(gòu)可以分離單元測試代碼與生產(chǎn)代碼,保持代碼環(huán)境整潔,有助于實踐 TDD。