我正在使用GoogleTest进行单元测试。今天我添加了一个新的测试,发现当单独运行时它通过了测试,但是在运行所有测试时失败了。我已经阅读了一些问题和答案,但它们都与C#有关。
我使用C++和CMake进行这项工作。
我的CMakeLists.txt如下所示:
cmake_minimum_required(VERSION 2.8)
option(test "Build all tests." OFF)
set(EXECUTABLE_NAME proj)
project(${EXECUTABLE_NAME})
set(CMAKE_CXX_FLAGS "-g -Wall")
include_directories(src/main/cpp
${Boost_INCLUDE_DIRS}
)
find_package(OpenCV REQUIRED core
imgproc
highgui
)
find_package(Boost REQUIRED COMPONENTS filesystem
system
regex
program_options
)
add_executable( ${EXECUTABLE_NAME}
# .........
)
target_link_libraries(${EXECUTABLE_NAME} ${OpenCV_LIBRARIES}
${Boost_LIBRARIES}
)
if (test)
find_package(GTest REQUIRED)
enable_testing()
include_directories( ${GTEST_INCLUDE_DIRS} )
add_executable(${EXECUTABLE_NAME}_test1
# .............
)
add_executable(${EXECUTABLE_NAME}_test2
# .............
)
add_executable(${EXECUTABLE_NAME}_test3
# .............
)
add_executable(${EXECUTABLE_NAME}_test4
# .............
)
target_link_libraries(${EXECUTABLE_NAME}_test1
${OpenCV_LIBRARIES}
${Boost_LIBRARIES}
${GTEST_LIBRARIES}
gtest_main
pthread
)
target_link_libraries(${EXECUTABLE_NAME}_test1
${OpenCV_LIBRARIES}
${Boost_LIBRARIES}
${GTEST_LIBRARIES}
gtest_main
pthread
)
target_link_libraries(${EXECUTABLE_NAME}_test2
${OpenCV_LIBRARIES}
${Boost_LIBRARIES}
${GTEST_LIBRARIES}
gtest_main
pthread
)
target_link_libraries(${EXECUTABLE_NAME}_test3
${OpenCV_LIBRARIES}
${Boost_LIBRARIES}
${GTEST_LIBRARIES}
gtest_main
pthread
)
target_link_libraries(${EXECUTABLE_NAME}_test4
${OpenCV_LIBRARIES}
${Boost_LIBRARIES}
${GTEST_LIBRARIES}
gtest_main
pthread
)
add_test(${EXECUTABLE_NAME}_test1
${EXECUTABLE_NAME}_test1
)
add_test(${EXECUTABLE_NAME}_test2
${EXECUTABLE_NAME}_test2
)
add_test(${EXECUTABLE_NAME}_test3
${EXECUTABLE_NAME}_test3
)
add_test(${EXECUTABLE_NAME}_test4
${EXECUTABLE_NAME}_test4
)
endif()
我使用类似这样的测试:
#pragma once
#include <gtest/gtest.h>
#include "My.hpp"
/** Testing
*/
TEST(qsdf, asdf)
{
// ... initialization
// ... test
}
我尝试使用 TEST_F
代替 TEST
,但它崩溃了,它说 qsdf 没有被声明(我必须承认我以前没有做过很多单元测试)。
我读过其他测试会修改一些东西的可能性,我认为这是真的,因为如果我在运行其他测试后再单独运行某些测试,它会再次失败。
我的问题是:如何在 C++ 中使用 CMake 初始化每个测试(在 Linux 下,如果有影响的话)?
MyTestFixture
而不是包含它的头文件吗?我不使用指针,只使用std::vector和cv::Mat,它们不需要释放。 - thedarkside ofthemoonconst
)不会引起任何争用问题。至于测试夹具:我将它们定义在与测试相同的文件中,以提高可读性。 - LilshiestetestX.cpp
中有3个相似的TEST(...)
失败。 如果我单独运行它,它会通过,但是如果我将其与所有其他测试一起运行,它会在中间的TEST
失败(无论cpp在测试顺序中的位置如何)。 我发现如果只交换testX.cpp
中的第一个和第二个TEST
,则可以通过。这意味着什么? - thedarkside ofthemoon