最近我开始学习单元测试,我想用gtest测试我的程序 . 我用这个订单安装所有:
$ 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
现在写代码:
#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:在函数 AddTest_getTest_Test::TestBody()': /home/artem/CLionProjects/mock2/main.cpp:33: undefined reference to
testing :: Message :: Message()'/ home / artem / CLactProjects / mock2 / main.cpp:33:对 testing::internal::AssertHelper::AssertHelper(testing::TestPartResult::Type, char const*, int, char const*)' /home/artem/CLionProjects/mock2/main.cpp:33: undefined reference to
testing :: internal ::的未定义引用AssertHelper :: operator =(testing :: Message const&)const'/home/artem/CLionProjects/mock2/main.cpp:33:对 testing::internal::AssertHelper::~AssertHelper()' /home/artem/CLionProjects/mock2/main.cpp:34: undefined reference to
测试的未定义引用:: Message :: 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
testing :: internal :: AssertHelper :: operator =(testing :: Message const&)const'/ home / artem / CLactProjects / mock2 / main.cpp:34:undefined reference to testing::internal::AssertHelper::~AssertHelper()' /home/artem/CLionProjects/mock2/main.cpp:33: undefined reference to
testing :: internal :: AssertHelper :: ~AssertHelper()'/ home / artem / CLIProjects / mock2 / main.cpp:34:对 testing::internal::AssertHelper::~AssertHelper()' CMakeFiles/mock2.dir/main.cpp.o: In function
main'的未定义引用:/ 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,int)'的未定义引用:/ home / artem / CLIProjects / 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 function
RUN_ALL_TESTS()':/ usr / local / include / gtest / gtest.h :2235:undefined refer从 testing::UnitTest::GetInstance()' /usr/local/include/gtest/gtest.h:2235: undefined reference to
testing :: UnitTest :: Run()'CMakeFiles / mock2.dir / main.cpp.o:在函数 AddTest::AddTest()': /home/artem/CLionProjects/mock2/main.cpp:15: undefined reference to
testing :: Test :: Test()'CMakeFiles / mock2.dir / main.cpp.o:在函数 AddTest::~AddTest()': /home/artem/CLionProjects/mock2/main.cpp:15: undefined reference to
testing :: Test :: ~Test()'CMakeFiles / mock2.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 to
testing :: 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 to
testing :: 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
testing :: 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 to
testing :: internal :: EqFailure(char const ,char const ,std :: __ cxx11 :: basic_string,std :: allocator> const&,std :: __ cxx11 :: basic_string,std :: allocator> const&,bool )' CMakeFiles/mock2.dir/main.cpp.o:(.rodata._ZTI7AddTest[_ZTI7AddTest]+0x10): undefined reference to `typeinfo for testing::Test' collect2:错误:ld返回1退出状态CMakeFiles / mock2.dir / build.make:94:目标'mock2'失败make [3]: *** [mock2] Error 1 CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/mock2.dir/all' failed make[2]: [CMakeFiles / mock2.dir / all]错误2 CMakeFiles / Makefile2:79 :目标'CMakeFiles/mock2.dir/rule'失败make [1]: **** **[CMakeFiles/mock2.dir/rule] Error 2 Makefile:118: recipe for target 'mock2' failed make: *** [mock2]错误2
但是当使用命令时
g++ main.cpp -o test -lgtest -lpthread
everytheng很好 . 如何修复它并在命令行中运行它?
1 回答
如果您正在使用CLion,那么您可能有一个CMakeLists.txt文件,您应该添加规则以链接到库 . 为此,请将以下行添加到CMakeLists.txt
有关详细信息,请访问here .