我如何使测试工作

How do I make gtest work

本文关键字:工作 测试 何使      更新时间:2023-10-16

所以我和其他一些人一起得到undefined reference to testing::UnitTest::Run()。我已经编译了这些库(libgtest.alibgtest_main.a),并将它们放在MinGW的lib文件夹中,但没有找到任何地方。这是我的CMakeList.txt:

cmake_minimum_required(VERSION 3.2)
project(proj_tests)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
include_directories("E:/Git/proj")
include_directories("D:/Development/Libraries/gtest-1.7.0/include")
find_package(gtest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
add_executable(proj_tests ${SOURCE_FILES} containers/proj_test.h)
target_link_libraries(proj_tests ${GTEST_LIBRARIES} pthread)

我已经在gtest样本上做了make,并且能够运行它而没有任何问题。

我在Windows 7上使用CLion进行这个项目。我怎样才能使这个谷歌测试框架的东西正常工作?

当您构建gtest时,您应该有以下三个文件:

  • include_fused/gt gtest.h
  • include_fused/gt gtest-all.cc
  • include_fused/gt gtest_main.cc

如果您提供自己的main,则只需要前两个。如果要使用gtest main,还需要第三个。建议将它们添加到正在构建的每个单元测试项目中。

因此,在经历了很多痛苦之后,我切换到Linux,并通过下载和编译libgtest-dev并使用Erik Smistad的博客中的配置来尝试它。它在CLion项目中工作,没有问题,这意味着我的Windows编译的Google测试库发生了一些奇怪的事情。

对于windows/MinGW:这是我对windows的解决方案…

    我从Richard Pattis的UCI网页上得到了预编译的库,关于如何让google测试框架在eclipse上工作。
  1. include中的gtest文件夹被复制到mingw32include文件夹,
  2. make文件夹中的gtest_main.alibgtest.a文件拷贝到mingw32lib文件夹中。

对我来说,最终的CMake配置是这样的:

cmake_minimum_required(VERSION 3.2)
project(eadlib_tests)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
#path to project to test
include_directories("E:/Git/eadlib")
#Google test framework stuff
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
add_executable(eadlib_tests ${SOURCE_FILES} containers/eadlib_test.h)
target_link_libraries(eadlib_tests ${GTEST_LIBRARIES} pthread)

像这样(这是我的一个库项目的片段)

find_package(GTest REQUIRED)
target_link_libraries(cpputil_test cpputil ${CMAKE_THREAD_LIBS_INIT} ${GTEST_BOTH_LIBRARIES} ${Boost_LIBRARIES} )
add_test(NAME cpputil_test COMMAND cpputil_test)

当然,在我的例子中,这个项目叫做cpputil_test。你需要把它替换成你自己的。

还要注意CMAKE_THREAD_LIBS_INIT的使用,它允许您的代码在所有主机系统之间可移植。在linux上构建时,它隐藏了对pthreads的依赖(例如,OSX, iOS和Windows没有此依赖)。