gpt4 book ai didi

c++ - 谷歌测试几个文件

转载 作者:行者123 更新时间:2023-11-30 04:00:34 25 4
gpt4 key购买 nike

我想测试写在单独文件(说明!)中的斐波那契数列代码,但我不知道如何编译。

fib.h:

#ifndef FIB_H
#define FIB_H
#include <gtest/gtest.h>


class fib
{
public:
int fibRec(int n);
};

TEST(testFib, firstTest)
{
fib fibnumber;
EXPECT_EQ(55, fibnumber.fibRec(10));
EXPECT_EQ(13, fibnumber.fibRec(8));
EXPECT_EQ(89, fibnumber.fibRec(11));
EXPECT_EQ(3, fibnumber.fibRec(5));
}

#endif // FIB_H

fib.cpp:

#include "fib.h"

int fib::fibRec(int n)
{

if(n <= 0) return 0;
if(n == 1) return 1;
else return(fibRec(n-1)+fibRec(n-2));

}

主要.cpp:

#include <limits>
#include "fib.h"

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

我的 libgtest.a/home/me/gtestinclude/home/me/gtest/gtest-1.7.0/include。我尝试像这样用 g++ 在终端中编译和运行测试,但没有成功

$ g++ -c fib.cpp
$ g++ -c fib.h
$ g++ -c main.cpp
$ g++ -I/home/me/gtest/gtest-1.7.0/include -pthread main.cpp libgtest.a -o test_exe

我做错了什么或者我应该添加什么?

编辑:

我尝试了 $ g++ -I/home/me/gtest/gtest-1.7.0/include -pthread main.cpp fib.cpp libgtest.a -o test_exe

但是我得到了一个错误

/tmp/ccTTfKeF.o:(.bss+0x0): multiple definition of `testFib_firstTest_Test::test_info_'
/tmp/ccq6EExi.o:(.bss+0x0): first defined here
/tmp/ccTTfKeF.o: In function `testFib_firstTest_Test::TestBody()':
fib.cpp:(.text+0x0): multiple definition of `testFib_firstTest_Test::TestBody()'
/tmp/ccq6EExi.o:main.cpp:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status

最佳答案

您需要编译和链接您的目标文件才能运行您的程序:

g++ -I/home/me/gtest/gtest-1.7.0/include -pthread 
main.cpp
fib.cpp
libgtest.a -o test_exe

而且,最重要的是,您需要将测试主体从 header 移动到您的 main.cpp 文件中

//main.cpp
#include <limits>
#include "fib.h"

TEST(testFib, firstTest)
{
fib fibnumber;
EXPECT_EQ(55, fibnumber.fibRec(10));
EXPECT_EQ(13, fibnumber.fibRec(8));
EXPECT_EQ(89, fibnumber.fibRec(11));
EXPECT_EQ(3, fibnumber.fibRec(5));
}

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

你多次定义函数体违反了ODR .

关于c++ - 谷歌测试几个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26253179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com