使用CLion的Google Test不会运行测试

时间:2017-04-05 14:19:49

标签: c++ cmake googletest clion

我正在尝试使用google test和CLion运行一个简单的测试。我认为我已经正确设置了cmake,并且我能够进行测试"。当我这样做时说没有找到测试。有任何想法吗? 的CMakeLists.txt

cmake_minimum_required(VERSION 3.7)

project(expirement)

find_package(Threads REQUIRED)

set(CMAKE_CXX_STANDARD 14)

set(SOURCE_FILES main.cpp getstring.cpp tests.cpp)
include(${CMAKE_ROOT}/Modules/ExternalProject.cmake)

ExternalProject_Add(googletest
        SOURCE_DIR "/home/dcooke/googletest-master/googletest/"
        )
ExternalProject_Get_Property(googletest source_dir)
include_directories(${source_dir}/include)

add_executable(expirement main.cpp getstring.cpp tests.cpp)
add_dependencies(expirement googletest)



target_link_libraries(expirement
        /home/dcooke/BuildBinaries/lib/libgtest.a
        /home/dcooke/BuildBinaries/lib/libgtest_main.a
        )

target_link_libraries(expirement Threads::Threads)

enable_testing()

测试文件:

#include "getstring.h"
#include "gtest/gtest.h"

TEST(StringTest, CheckReturnValue) {
    ASSERT_EQ("asdfasf",GetTheString());
}

命令行和结果:

/home/user/Code/expirement/cmake-build-debug/expirement --gtest_filter=StringTest.*:StringTest/*.*:*/StringTest.*/*:*/StringTest/*.* --gtest_color=no
Testing started at 10:18 AM ...
The String

Process finished with exit code 0
Empty test suite.

2 个答案:

答案 0 :(得分:4)

其他评论和答案表明您需要使用add_test()。如果您想使用CMake的CTest框架,您只需要使用enable_testing()add_test()。如果你想要的话,任何可执行文件都可以是一个测试。让我们深入研究你的问题。

首先,简化。我假设您已成功构建googletest,并且您知道如何使用它(如果不是,则这是一个单独的问题。)减少CMakeLists.txt

<强>的CMakeLists.txt

cmake_minimum_required(VERSION 3.7)
project(expirement)

find_package(Threads REQUIRED)
set(CMAKE_CXX_STANDARD 14)

set(SOURCE_FILES main.cpp getstring.cpp tests.cpp)
include_directories($ENV{HOME}/googletest/googletest/include)

add_executable(expirement main.cpp getstring.cpp tests.cpp)
target_link_libraries(expirement
        $ENV{HOME}/googletest/googlemock/gtest/libgtest.a
        $ENV{HOME}/googletest/googlemock/gtest/libgtest_main.a
        )
target_link_libraries(expirement Threads::Threads)

您会注意到我删除了ExternalProject位,您可以找出我放谷歌的位置。

现在,由于我们没有你的来源,我不得不嘲笑几个存根。

<强>的main.cpp

#include "gtest/gtest.h"

int main(int argc, char *argv[]) {
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

<强> getstring.h

#include <string>

std::string GetTheString();

<强> getstring.cpp

#include <string>

std::string GetTheString() {
  return (std::string) "asdfasf";
}

现在,cmake和build:

~/foo
❯ cmake .
-- The C compiler identification is AppleClang 8.1.0.8020038
-- The CXX compiler identification is AppleClang 8.1.0.8020038
-- Check for working C compiler: /App
[ ... cmake output goes here. blah blah blah ... ]
-- Found Threads: TRUE  
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/nega/foo

~/foo
❯ make
Scanning dependencies of target expirement
[ 25%] Building CXX object CMakeFiles/expirement.dir/main.cpp.o
[ 50%] Building CXX object CMakeFiles/expirement.dir/getstring.cpp.o
[ 75%] Building CXX object CMakeFiles/expirement.dir/tests.cpp.o
[100%] Linking CXX executable expirement
[100%] Built target expirement

~/foo
❯ 

现在运行experiment简化。 (另外,记得逃避那些!)

~/foo
❯ ./expirement --gtest_filter='*'
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from StringTest
[ RUN      ] StringTest.CheckReturnValue
[       OK ] StringTest.CheckReturnValue (0 ms)
[----------] 1 test from StringTest (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[  PASSED  ] 1 test.

~/foo
❯ 

如果你达到这一点,太好了!你在路上很顺利。您可以为--gtest_filter建立更严格的过滤器。 (请记住逃避那些*!)您可以构建CMakeLists.txt以包含您取出的ExternalProject位。但请记住,ExternalProject中的实际功能和实用程序是您希望构建外部项目作为项目构建过程的一部分。通常情况下,指导用户自己下载和构建外部项目要简单得多。

如果你没有达到这一点,请停止。退一步看看你的代码。确保您已正确设置测试并进行定义。确保您正确初始化googletest。确保您的测试名称中没有任何拼写错误。 (常见的&#34;陷阱&#34;。)修复该部分,然后返回CMake部分。

答案 1 :(得分:0)

您可能需要使用add_test()将测试实际添加到测试目标