Rob*_*inW 4 c++ cmake googletest
我试图使用 googletest 设置 CMake C++ 项目。我对 CMake 并没有真正的经验并使用过这个指南来创建我自己的设置。
\n\n当尝试构建项目时,编译器会抛出错误:
\n\n.../test.cpp:12:5: error: \xe2\x80\x98EXPECT_THAT\xe2\x80\x99 was not declared in this scope\n EXPECT_THAT(a, ContainerEq(b));\n ^~~~~~~~~~~\n.../test.cpp:12:5: note: suggested alternative: \xe2\x80\x98EXPECT_GT\xe2\x80\x99\n EXPECT_THAT(a, ContainerEq(b));\n ^~~~~~~~~~~\n EXPECT_GT\n../test.cpp:13:31: error: \xe2\x80\x98ContainerEq\xe2\x80\x99 is not a member of \xe2\x80\x98testing\xe2\x80\x99\n EXPECT_THAT(a, ::testing::ContainerEq(b)); // doesn\'t work either\nRun Code Online (Sandbox Code Playgroud)\n\n不过 GTest 的某些部分似乎工作正常。如果我注释掉第二个测试,一切都会正常。
\n\n文件夹结构:
\n\n顶级 CMakeLists.txt
\n\ncmake_minimum_required (VERSION 3.8)\nproject (TestProject)\nenable_testing()\nadd_subdirectory(test)\nRun Code Online (Sandbox Code Playgroud)\n\n测试/CMakeLists.txt
\n\ninclude(gtest.cmake)\nadd_executable(UnitTests test.cpp)\ntarget_link_libraries(UnitTests libgtest)\nadd_test(NAME AllUnitTests COMMAND UnitTests)\nRun Code Online (Sandbox Code Playgroud)\n\n测试/gtest.cmake
\n\nfind_package(Threads REQUIRED)\n\n# Enable ExternalProject CMake module\ninclude(ExternalProject)\n\n# Download and install GoogleTest\nExternalProject_Add(\n gtest\n URL https://github.com/google/googletest/archive/master.zip\n PREFIX ${CMAKE_CURRENT_BINARY_DIR}/gtest\n # Disable install step\n INSTALL_COMMAND ""\n)\n\n# Get GTest source and binary directories from CMake project\nExternalProject_Get_Property(gtest source_dir binary_dir)\n\n# Create a libgtest target to be used as a dependency by test programs\nadd_library(libgtest IMPORTED STATIC GLOBAL)\nadd_dependencies(libgtest gtest)\n\n# Set libgtest properties\nset_target_properties(libgtest PROPERTIES\n "IMPORTED_LOCATION" "${binary_dir}/googlemock/gtest/libgtest.a"\n "IMPORTED_LINK_INTERFACE_LIBRARIES" "${CMAKE_THREAD_LIBS_INIT}"\n)\n\n# Create a libgmock target to be used as a dependency by test programs\nadd_library(libgmock IMPORTED STATIC GLOBAL)\nadd_dependencies(libgmock gtest)\n\n# Set libgmock properties\nset_target_properties(libgmock PROPERTIES\n "IMPORTED_LOCATION" "${binary_dir}/googlemock/libgmock.a"\n "IMPORTED_LINK_INTERFACE_LIBRARIES" "${CMAKE_THREAD_LIBS_INIT}"\n)\n\n# I couldn\'t make it work with INTERFACE_INCLUDE_DIRECTORIES\ninclude_directories("${source_dir}/googletest/include"\n "${source_dir}/googlemock/include")\nRun Code Online (Sandbox Code Playgroud)\n\n测试/测试.cpp
\n\n#include <vector>\n#include "gtest/gtest.h"\n\nTEST(SampleTest, Equal){\n EXPECT_EQ(42, 42);\n}\n\nTEST(ContainerComparison, Equal){\n const std::vector<int> a(2, 1);\n const std::vector<int> b(2, 1);\n\n EXPECT_THAT(a, ContainerEq(b));\n EXPECT_THAT(a, ::testing::ContainerEq(b)); // doesn\'t work either\n}\n\nint main(int argc, char** argv){\n ::testing::InitGoogleTest(&argc, argv);\n int ret = RUN_ALL_TESTS();\n return ret;\n}\nRun Code Online (Sandbox Code Playgroud)\n
匹配器是 GMock 的一部分。您需要包含它(并链接到它的库)。
#include <gmock/gmock.h>
Run Code Online (Sandbox Code Playgroud)
GMock 曾经是一个独立的库,现在已合并到 GoogleTest 存储库中。然而它有单独的包含和库。
您正在关注的教程是 2014 年的。您可以在GoogleTest GitHub 存储库中找到不错的最新教程。
| 归档时间: |
|
| 查看次数: |
3000 次 |
| 最近记录: |