Próbuję zrobić test dla funkcji przy użyciu GoogleTest teraz nie jest już znalezieniem się EqFailure
rzecz:nieokreślone odniesienie do testowania :: wewnętrzny :: EqFailure w numeru GTEST
/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)'
piszę test tak:
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 expected as output
cv::Mat verMat = (cv::Mat_<uchar>(5, 5) << 1, 1, 0, 1, 1,
1, 0, 0, 0, 1,
1, 0, 0, 1, 1,
0, 0, 0, 1, 1,
1, 0, 1, 1, 1);
// call erode(...)
Morphology morphology;
cv::Mat matrixOut;
morphology.erode(matrix, kernel, matrixOut);
for (int i = 0; i < matrixOut.rows; i++)
{
for (int j = 0; j < matrixOut.rows; j++)
{
EXPECT_EQ(matrixOut.ptr<uchar>(i)[j], verMat.ptr<uchar>(i)[j]);
}
}
}
I korzystam z OpenCV i w razie potrzeby opublikuję inne pliki.
CMake
plik jest tutaj:
cmake_minimum_required(VERSION 2.8)
set(EXECUTABLE_NAME lpdetect)
project(${EXECUTABLE_NAME})
option(DEBUG "Display images for each step" OFF)
if (DEBUG)
set(CMAKE_CXX_FLAGS "-g -Wall -Wno-unknown-pragmas -Wno-reorder -Wno-sign-compare -Wno-switch -std=gnu++11 -DDISPLAY_IMGS -DBOOST_LOG_DYN_LINK")
else()
set(CMAKE_CXX_FLAGS "-g -Wall -Wno-unknown-pragmas -Wno-reorder -Wno-sign-compare -Wno-switch -std=gnu++11 -DBOOST_LOG_DYN_LINK")
endif()
find_package(OpenCV REQUIRED core
imgproc
features2d
nonfree
highgui
)
find_package(Boost REQUIRED COMPONENTS filesystem
program_options
system
thread
locale
regex
date_time
log
log_setup
timer
)
include_directories(src/main/cpp
${Boost_INCLUDE_DIRS}
${OpenCV2_INCLUDE_DIRS}
)
add_executable(${EXECUTABLE_NAME}
src/main/cpp/main.cpp
# and the other files
)
target_link_libraries(${EXECUTABLE_NAME} ${OpenCV_LIBS}
"-laws-cpp"
"-lcasablanca"
${Boost_LIBRARIES}
"-lcrypto"
)
find_package(GTest REQUIRED gtest_main
pthread)
enable_testing()
include_directories(${GTEST_INCLUDE_DIRS})
add_executable(${EXECUTABLE_NAME}_test src/test/cpp/test_Morphology.cpp
src/main/cpp/tools/CMorphology.cpp
src/main/cpp/tools/CMorphology.hpp
)
target_link_libraries(${EXECUTABLE_NAME}_test
${OpenCV_LIBRARIES}
${Boost_LIBRARIES}
${GTEST_LIBRARIES}
)
add_test(${EXECUTABLE_NAME}_test
${EXECUTABLE_NAME}_test
)
Zrobiłem to na wile temu, a po kilku zobowiązuje to wyświetla ten błąd. Dlaczego go już nie znajduje?
Czy możesz spróbować uruchomić swoją kompilację w pełnym zakresie i sprawdzić, czy istnieje opcja katalogu z linkami '-L' do katalogu zawierającego biblioteki gtest? Czy łączysz statycznie lub dynamicznie? Błąd występuje w czasie połączenia (nie w czasie wykonywania), prawda? – NicholasM
To się dzieje w czasie połączenia, tak. Połączyłem go dynamicznie – sop
Czy powinien to być 'Gtest_LIBRARIES' zamiast' GTEST_LIBRARIES'? Nie jestem zbyt zaznajomiony z cmake, ale podstawową ideą jest to, że cmake powinien wygenerować '-lgtest' w linii poleceń i możliwe' -L/path/to/gtest'. Czy widzisz, czy jest to część linii poleceń linku? Możliwe: http://stackoverflow.com/questions/8507723/how-to-start-working-with-test-and-cmake – NicholasM