首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >链接gtest项目时出错

链接gtest项目时出错
EN

Stack Overflow用户
提问于 2018-01-03 09:31:30
回答 1查看 3.9K关注 0票数 1

最近我开始学习单元测试,我想用gtest测试我的程序。我按照以下命令安装:

代码语言:javascript
运行
复制
$ git clone https://github.com/google/googletest 
$ cd googletest 
$ cmake -DBUILD_SHARED_LIBS=ON . 
$ make 
$ cd googlemock 
$ sudo cp ./libgmock_main.so ./gtest/libgtest.so gtest/libgtest_main.so ./libgmock.so /usr/lib/ 
$ sudo ldconfig

现在编写代码:

代码语言:javascript
运行
复制
#include "gtest/gtest.h"

class Add
{
  private:
     int element;
  public:
     Add():element(0){}
     ~Add(){}
     void setElement(int e){ element = e; }
     int getElement() { return element; }
     int adder(int e) { return element += e; }
};

class AddTest : public ::testing::Test
{
  protected:
       int abc(int a){
            return a;
        }

     virtual void SetUp(){
          add1.setElement(1);
          add2.setElement(20);
     }
     virtual void TearDown(){}

Add add1;
Add add2;
};

TEST_F(AddTest, getTest)
{
   EXPECT_EQ(1, add1.getElement());
   EXPECT_EQ(20, add2.getElement());
}

int main(int argc, char **argv)
{
   ::testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
}

当我运行测试时,我得到了以下错误:

CMakeFiles/mock2.dir/main.cpp.o:在函数testing::internal::AssertHelper::AssertHelper(testing::TestPartResult::Type, char const*, int, char const*)' /home/artem/CLionProjects/mock2/main.cpp:33: undefined reference totesting::internal::AssertHelper::operator=(testing::Message测试中:AddTest_getTest_Test::TestBody()': /home/artem/CLionProjects/mock2/main.cpp:33: undefined reference to::AddTest_getTest_Test::TestBody()': /home/artem/CLionProjects/mock2/main.cpp:33: undefined reference to() /home/artem/CLionProjects/mock2/main.cpp:33:未定义的对testing::internal::AssertHelper::AssertHelper(testing::TestPartResult::Type, char const*, int, char const*)' /home/artem/CLionProjects/mock2/main.cpp:34: undefined reference to测试的引用( const‘&)const’/home/artem/CLionProjects/mock2/main.cpp:33:对testing::internal::AssertHelper::~AssertHelper()' /home/artem/CLionProjects/mock2/main.cpp:34: undefined reference to测试的未定义引用::Message:消息() /home/artem/CLionProjects/mock2/main.cpp:34:未定义的对testing::internal::AssertHelper::AssertHelper(testing::TestPartResult::Type, char const*, int, char const*)' /home/artem/CLionProjects/mock2/main.cpp:34: undefined reference to测试的引用::internal::AssertHelper::operator=(testing::Message const&) const‘/home/artem/CLionProjects/mock2/main.cpp:34:未定义引用testing::internal::AssertHelper::~AssertHelper()' /home/artem/CLionProjects/mock2/main.cpp:33: undefined reference totesting::internal::AssertHelper::~AssertHelper()’/home/artem/CLionProjects/mock2/mock2/main.cpp:34:未定义的对testing::internal::AssertHelper::~AssertHelper()' CMakeFiles/mock2.dir/main.cpp.o: In functionmain的引用: /home/artem/CLionProjects/mock2/main.cpp:39:未定义的对testing::InitGoogleTest(int*, char**)' CMakeFiles/mock2.dir/main.cpp.o: In function__static_initialization_and_destruction_0(int,的引用‘:/home/artem/CLionProjects/mock2/main.cpp:31:对testing::internal::MakeAndRegisterTestInfo(char const*, char const*, char const*, char const*, testing::internal::CodeLocation, void const*, void (*)(), void (*)(), testing::internal::TestFactoryBase*)' CMakeFiles/mock2.dir/main.cpp.o: In functionRUN_ALL_TESTS()的未定义引用: /usr/local/include/gtest/gtest.h:2235:未定义的对testing::UnitTest::GetInstance()' /usr/local/include/gtest/gtest.h:2235: undefined reference to测试的引用:UnitTest::Run():CMakeFiles/mock2.dir/main.cpp.o:在函数AddTest::AddTest()': /home/artem/CLionProjects/mock2/main.cpp:15: undefined reference to测试中::Test:Test() CMakeFiles/mock2.dir/main.cpp.o:在功能AddTest::~AddTest()': /home/artem/CLionProjects/mock2/main.cpp:15: undefined reference to测试中::AddTest::~AddTest()': /home/artem/CLionProjects/mock2/main.cpp:15: undefined reference to::~Test(). .dir/main.cpp.o:在函数testing::internal::scoped_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::reset(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)': /usr/local/include/gtest/internal/gtest-port.h:1172: undefined reference totesting::internal::IsTrue(bool)‘中,CMakeFiles/mock2.dir/main.cpp.o:在函数testing::internal::scoped_ptr<std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> > >::reset(std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >*)': /usr/local/include/gtest/internal/gtest-port.h:1172: undefined reference totesting::internal::IsTrue(bool)’中,CMakeFiles/mock2.dir/main.cpp.o:函数testing::AssertionResult testing::internal::CmpHelperEQ<int, int>(char const*, char const*, int const&, int const&)': /usr/local/include/gtest/gtest.h:1394: undefined reference to测试::AssertionSuccess()‘CMakeFiles/mock2.dir/main.cpp.o:在函数testing::AssertionResult testing::internal::CmpHelperEQFailure<int, int>(char const*, char const*, int const&, int const&)': /usr/local/include/gtest/gtest.h:1384: undefined reference totesting::internal::EqFailure(char const*中,std::__cxx11::basic_string,std::分配器> const&,std::__cxx11::basic_string,std::allocator >const&CMakeFiles/mock2.dir/main.cpp.o:(.rodata._ZTI7AddTest_ZTI7AddTest+0x10):未定义的“用于测试的类型信息::测试”collect2: collect2: ld返回了1个退出状态CMakeFiles/mock2.dir/ failed。生成:94:目标' mock2‘失败的make3:* mock2错误1 CMakeFiles/Makefile2:67:目标' CMakeFiles/mock2.dir/all’make2 CMakeFiles/mock2.dir/all Error 2 CMakeFiles/Makefile2:79:目标‘CMakeFiles/mockake2.dir/规则’配方‘失败的make1 CMakeFiles/mock2.dir/规则错误2 Makefile:118:目标' mock2‘失败的配方:* mock2错误2

但当使用命令时

代码语言:javascript
运行
复制
g++ main.cpp -o test -lgtest -lpthread

每件事都是好的。我如何修复它并在命令行中运行它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-03 10:41:24

如果您正在使用CLion,那么您可能有一个CMakeLists.txt文件,您应该添加链接到库的规则。要做到这一点,请在CMakeLists.txt中添加以下行

代码语言:javascript
运行
复制
enable_testing()
find_package(GTest REQUIRED) # Find the google testing framework on your system
include_directories(${GTEST_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${GTEST_LIBRARIES}) # Replace ${PROJECT_NAME} with your target name

有关更多细节,请访问这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48074625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档