它没有记录在网站上,人们似乎在设置框架时遇到了问题.有人可以逐步介绍示例项目设置.
c++ unit-testing visual-studio-2005 googletest visual-studio
我刚刚下载了googletest,用CMake生成了它的makefile并构建了它.现在,我需要在我的测试项目中使用它.
有了CMake,我被告知不要直接指向gtest库(使用include _directories或link_directories),而是使用find_package().
问题是,生成的gtest makefile没有安装目标.我无法理解find_package(GTest REQUIRED)如果没有某种安装可以工作.此外,将gtest文件夹作为子文件夹放在我的项目中是不可能的.
谢谢你的帮助.
我有一个非常简单的C++库(一个头文件,一个.cpp文件).我想使用Google C++测试框架为这个项目编写单元测试.
这是目录结构:
~/project1
|
|-- project1.cpp
|-- project1.h
|-- project1_unittests.cpp
\-- CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
我不打算编写自己的main()函数.我想与引物中提到的gtest_main链接.CMakeLists.txt应该包含什么?
我正在尝试使用GoogleTest来测试一个简单的函数,但是当我make在build文件夹中运行时,编译器会Undefined Reference向我抛出错误消息.我引用了gtest头文件,所以我不确定是什么问题.有任何想法吗?我是unix和单元测试的全部主题的新手,所以我很可能会遗漏一些简单的东西.提前致谢!
错误消息:
CMakeFiles/Proj2.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x1e): undefined reference to `testing::InitGoogleTest(int*, char**)'
main.cpp:(.text+0x23): undefined reference to `testing::UnitTest::GetInstance()'
main.cpp:(.text+0x2b): undefined reference to `testing::UnitTest::Run()'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
main.cpp中
#include "gtest/gtest.h"
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Run Code Online (Sandbox Code Playgroud)
TEST.CPP
#include "gtest/gtest.h"
#include "Testable.h"
TEST(GetTwoTest, Two) {
EXPECT_EQ(2, GetTwo());
}
Run Code Online (Sandbox Code Playgroud)
Testable.cpp
#include "Testable.h"
int GetTwo() {
return 3;
}
Run Code Online (Sandbox Code Playgroud)
这是我的CMakeLists.txt文件:
cmake_minimum_required(VERSION 2.6)
SET(CMAKE_CXX_FLAGS "-std=gnu++11") #Turn on C++11 Support
set(FILES_TO_TEST Testable.cpp)
set(UNIT_TESTS …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用GoogleTest对函数进行测试,现在它不再找到了这个EqFailure 东西:
/usr/include/gtest/gtest.h:1337: undefined reference to `testing::internal::EqFailure(char const*, char const*, testing::internal::String const&, testing::internal::String const&, bool)'
Run Code Online (Sandbox Code Playgroud)
我正在写这样的测试:
test_file.cpp:
#include <gtest/gtest.h>
#include "tools/CMorphology.hpp"
TEST(erode_Morph, crossKernel_Morph)
{
// initialize matrix to be eroded
cv::Mat matrix = (cv::Mat_<uchar>(5, 5) << 1, 1, 1, 1, 1,
1, 1, 0, 1, 1,
1, 1, 1, 1, 1,
1, 0, 1, 1, 1,
1, 1, 1, 1, 1
);
// initialize the cross kernel
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(3, 3));
// initialize the vector …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用该FetchContent模块将 googletest 添加到我的构建中,但我遇到了许多部分答案,并且无法到达我想要的位置。使用该模块的过时示例似乎过多ExternalProject,但使用该模块的有用示例却很少FetchContent。
这是我今天浏览过的不完整的参考文献列表:
这是我要使用的文件结构:
-root
-build
-googletest-build
-googletest-src
-googletest-test
-src
-test
-src
-CMakeLists.txt
-AllOfMySourceFiles
-test
-CMakeLists.txt
-testgtest.cpp
-CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
这些是我尝试用来构建的命令:
cmake ..
cmake --build .
Run Code Online (Sandbox Code Playgroud)
到目前为止,我能够将所有源文件链接到我想要的 dll 中,并且我相当有信心知道如何将它与我想要使用的测试 exe 链接。我遇到的主要问题是使用该FetchContent模块构建testgtest.cpp可执行文件并将其与 googletest 链接。它一直无法构建,而且失败的具体原因根本不明显。
根/CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
set(CMAKE_CXX_FLAGS_RELEASE "/MT")
set(CMAKE_CXX_FLAGS_DEBUG "/MTd")
set(CMAKE_CXX_STANDARD 11)
set(LIBNAME "WTP")
set(TESTNAME "TestRunner")
set(LIB_MAJOR_VERS "0")
set(LIB_MINOR_VERS "0")
set(LIB_PATCH_VERS "0")
#build source
project(${LIBNAME}
VERSION ${LIB_MAJOR_VERS}.${LIB_MINOR_VERS}.${LIB_PATCH_VERS})
add_subdirectory(src)
#build tests
project(${TESTNAME})
add_subdirectory(test)
enable_testing() …Run Code Online (Sandbox Code Playgroud) 我对 C++ 和 CMake 比较陌生。我正在尝试创建一个库,但在尝试运行单元测试时出现错误。从我的研究中,我已经收集了“未解析的外部符号”错误的含义,但我无法弄清楚如何修复它。
这是我的项目结构:
lib
glfw - GLFW source folder
src
ogl-renderer.cpp
ogl-renderer.h
CMakeLists.txt
...additional source files
test
ogl-test.cpp
ogl-test.h
CMakeLists.txt
CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
CMakeLists.txt:
cmake_minimum_required (VERSION 3.8)
project("ogl-renderer")
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
add_subdirectory ("lib/glfw-3.3.2")
add_subdirectory ("src")
add_subdirectory ("test")
enable_testing()
add_test (ogl-renderer olg-test)
Run Code Online (Sandbox Code Playgroud)
源代码/CMakeLists.txt:
cmake_minimum_required (VERSION 3.8)
add_library (ogl-renderer "engine/renderer.cpp" "engine/renderer.h" "engine/renderer.cpp" "engine/renderer.h" "engine/Window.cpp" "engine/Window.h" "engine/Shape.cpp" "engine/Shape.h" "engine/message-queue.cpp" "engine/message-queue.h" "engine/messages/window-mgmt.h" "engine/messages/window-mgmt.cpp")
target_link_libraries(ogl-renderer glfw)
Run Code Online (Sandbox Code Playgroud)
测试/CMakeLists.txt:
add_executable (ogl-test …Run Code Online (Sandbox Code Playgroud) 我想弄清楚如何使用 CMake 对我的 C++ 项目运行 Google 测试。到目前为止,我已经创建了一个名为 Simple 的项目和一个名为 SimpleTest 的 Google Test 项目。
对于简单项目
这是我的 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 2.8.4)
project(Simple)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES
main.cpp
NewCppClass.cpp
NewCppClass.h)
add_executable(Simple ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)
这是我的 main.cpp 文件:
#include <iostream>
#include "NewCppClass.h"
using namespace std;
int main() {
NewCppClass newCppClass;
int i = newCppClass.getNumberToTest();
cout << "i = " << i;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我的类标题:
#ifndef SIMPLE_NEWCPPCLASS_H
#define SIMPLE_NEWCPPCLASS_H
class NewCppClass {
public:
int getNumberToTest();
};
#endif //SIMPLE_NEWCPPCLASS_H
Run Code Online (Sandbox Code Playgroud)
这是我的 .cpp 文件:
#include "NewCppClass.h"
int NewCppClass::getNumberToTest() …Run Code Online (Sandbox Code Playgroud)