CMake9-自动单元测试2:gtest

在这里插入图片描述
在这里插入图片描述

# 701test_ctest/CMakeLists.txt
cmake_minimum_required(VERSION 3.22)
project(gtest_fetch)


file(WRITE gtest_fetch.cpp [=[
#include <gtest/gtest.h>
TEST(MyTest,MyTestDownload)
{
    EXPECT_EQ(7*6,42);
}
TEST(MyTest,MyTestUpload)
{
    EXPECT_EQ(7*6,41);
}
int main(int argc,char *argv[])
{
    //初始化gtest
    testing::InitGoogleTest(&argc,argv);
    return RUN_ALL_TESTS();
}
]=])
# 使用 FetchContent 下载安装googletest
include(FetchContent)

# 下载代码 git svn http
# git 下载 gtest
# 网络原因下载失败
#[[
FetchContent_Declare(
    googletest
    GIT_REPOSITORY https://github.com/google/googletest.git
    GIT_TAG release-1.12.1
    )
]]
# http下载gtest
FetchContent_Declare(
    googletest
    URL http://cdn.tarsyun.com/src/release-1.11.0.tar.gz
    )

# 编译安装gtest
FetchContent_MakeAvailable(googletest)

add_executable(gtest_fetch gtest_fetch.cpp)

# 设置gtest的库,头文件自动推导
target_link_libraries(
    gtest_fetch
    GTest::gtest_main
)

# 联合ctest和gtest
include(GoogleTest)
gtest_discover_tests(gtest_fetch)

# 打开才能运行ctest
enable_testing()
#[[
#第一步配置时会下载googletest
 cmake -S . -B build  
 cmake --build build
 cmake --install build --prefix=./
]]
#703gtest_tar_build_install/CMakeLists.txt
cmake_minimum_required(VERSION 3.22)
project(gtest_tar_build_install)

file(WRITE ${PROJECT_NAME}.cpp [=[
#include <gtest/gtest.h>
#include <iostream>
using namespace std;
TEST(MyTest,MyTestDownload)
{
    EXPECT_EQ(7*6,42);
}
TEST(MyTest,MyTestUpload)
{
    EXPECT_EQ(7*6,41);
}

class XLogTest :public ::testing::Test
{
protected:
    XLogTest(){cout<<"Create XLogTest"<<endl;}
    ~XLogTest(){cout<<"Drop XLogTest"<<endl;}
    void SetUp() override {cout<<"SetUp XLogTest"<<endl;} //每次测试开始进入
    void TearDown() override {cout<<"TearDown XLogTest"<<endl;} 
};
TEST_F(XLogTest,Init)
{
    ASSERT_TRUE(true);
}
TEST_F(XLogTest,Write)
{
    ASSERT_TRUE(false);
}
int main(int argc,char *argv[])
{
    //初始化gtest
    testing::InitGoogleTest(&argc,argv);
    return RUN_ALL_TESTS();
}
]=])

set(GTEST_PATH ${CMAKE_SOURCE_DIR}/gtest)
# 如果GTest没有安装
if(NOT EXISTS ${GTEST_PATH})
    #1 解压文件 gtest-1.11.0.tar.gz  
    # cmake -E 执行shell命令  PROJECT_BINARY_DIR -B build
    message("tar xf gtest-1.11.0.tar.gz")
    execute_process(COMMAND  ${CMAKE_COMMAND}
    -E tar xf ${CMAKE_SOURCE_DIR}/gtest-1.11.0.tar.gz 
    WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
    )

    #2 cmake配置 cmake -S . -B build
    # googletest-release-1.11.0
    message("${CMAKE_COMMAND} -S ${GTEST_SOURCE} -B ${GTEST_SOURCE}/build")
    set(GTEST_SOURCE ${PROJECT_BINARY_DIR}/googletest-release-1.11.0)
    execute_process(COMMAND  ${CMAKE_COMMAND} -S ${GTEST_SOURCE} 
    -B ${GTEST_SOURCE}/build
    )
    # 3 编程gtest cmake --build build

    message("${CMAKE_COMMAND} --build ${GTEST_SOURCE}/build")
    execute_process(COMMAND  ${CMAKE_COMMAND} --build ${GTEST_SOURCE}/build)


    # 4 安装gtest cmake --install build --prefix
    execute_process(COMMAND  ${CMAKE_COMMAND} --install ${GTEST_SOURCE}/build
    --prefix=${GTEST_PATH} --config Debug
    )
endif()

add_executable(${PROJECT_NAME} ${PROJECT_NAME}.cpp)

#[[
MultiThreaded
MultiThreadedDLL
MultiThreadedDebug   运行时静态库Debug版本
MultiThreadedDebugDLL  运行时动态库 Debug版本
]]
set_target_properties(${PROJECT_NAME} PROPERTIES
MSVC_RUNTIME_LIBRARY MultiThreadedDebug
)


# 查找gtest库 默认找不到 要找config文件
#设置find_package 查找路径
set(CMAKE_PREFIX_PATH ${GTEST_PATH}/lib/cmake/)
find_package(GTest)
message("GTest = ${GTest_FOUND}")
target_link_libraries(${PROJECT_NAME}
GTest::gtest_main
)

# 联合ctest和gtest
include(GoogleTest)
gtest_discover_tests(${PROJECT_NAME})

# 打开才能运行ctest
enable_testing()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值