尝试添加 gmock
时到已经在使用 gtest
的现有项目, 我发现了一系列与 pthread
有关的低级错误.我的猜测是这与 GoogleMock 和 GoogleTest 的构建方式有关(请参阅下面的详细信息),但不幸的是,关于在 Ubuntu 14 中使用这些库的最佳方式的信息不多。
将代码缩减为最小的代表性示例后,会发生什么:
我将 GoogleTest header 替换为 GoogleMock header 以及“主要”函数:
// Declarations at foo.h class Foo { public: int sum(int a, int b); // it returns a+b (defined in foo.cpp) }; // Test code at foo.test.cpp #include <gmock/gmock.h> // replaced <gtest/gtest.h> #include "foo.h" TEST(Foo,ReturnsSumOfTwoNumbers){ Foo foo; ASSERT_EQ( foo.sum(2,8), 10 ); } TEST(Foo,ReturnsSumOfTwoIntegerNumbers){ Foo foo; ASSERT_EQ( 6,foo.sum(-2,8) ); } // main.cpp #include <gmock/gmock.h> // replaced <gtest/gtest.h> int main(int argc, char **argv) { ::testing::InitGoogleMock(&argc, argv); // replaced InitGoogleTest return RUN_ALL_TESTS(); }
这很好用。
当我尝试使用 GoogleMock 功能(例如匹配器)时:
// foo.test.cpp using ::testing::Eq; //... TEST(Foo,ReturnsSumOfTwoNumbers){ Foo foo; // replaced ASSERT_EQ ASSERT_THAT( foo.sum(2,8), Eq(10) ); }
.. 它因以下错误而崩溃:
[ FATAL ] /path/to/gmock-1.7.0/gtest/include/gtest/internal/gtest-port.h:1340:: pthread_mutex_lock(&mutex_)failed with error 22 Aborted (core dumped)
使用其他 gmock 功能产生了类似的错误。
构建信息:
- Ubuntu 14.04
- 海湾合作委员会 4.8.2
gmock 1.7.0 已下载并使用 CMAKE 构建:
wget https://googlemock.googlecode.com/files/gmock-1.7.0.zip unzip gmock-1.7.0.zip GMOCK_PATH=$PWD/gmock-1.7.0 GTEST_PATH=$GMOCK_PATH/gtest mkdir $GMOCK_PATH/lib $GTEST_PATH/lib pushd $GMOCK_PATH/lib cmake -DBUILD_SHARED_LIBS=ON .. make cd $GTEST_PATH/lib cmake -DBUILD_SHARED_LIBS=ON .. make popd
最后,整个项目使用Qt的qmake构建:
INCLUDEPATH += $${GMOCK_PATH}/include $${GTEST_PATH}/include LIBS += -L$${GTEST_PATH}/lib -L$${GMOCK_PATH}/lib -lgmock -lgtest -lpthread
编译器输出为:
g++ -m64 -Wl,-rpath,/path/to/gmock-1.7.0/gtest/lib -Wl,-rpath,/path/to/gmock-1.7.0/lib -o all_tests foo.test.o foo.o main.o -L/path/to/gmock-1.7.0/gtest/lib -L/path/to/gmock-1.7.0/lib -lgmock -lgtest -lpthread
最佳答案
尝试在 CMake 中使用它
add_definitions("-DGTEST_HAS_PTHREAD=0")
关于c++ - 将测试从 GoogleTest 升级到 GoogleMock (Ubuntu 14) 时出现与 pthread 相关的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30865653/