2014-10-08 2 views
1

Я хочу протестировать мой код для последовательности fibonacci, который написан в отдельных файлах (инструкции!), Но я не знаю, как скомпилировать.googletest-ing несколько файлов

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)); 

} 

main.cpp:

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

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

libgtest.a Мои в /home/me/gtest и include в /home/me/gtest/gtest-1.7.0/include. я пытался скомпилировать и запустить тест в терминале с г ++, как это, но он не работает

$ 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 

Что я делаю не так или, вернее, то, что я должен добавить?

EDIT:

Я попытался $ 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 

ответ

2

Вы должны собрать и связать объектные файлы для того, чтобы иметь возможность запустить программу:

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

И, самое главное, вам нужно переместить пробное тело из заголовка в файл 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.

+0

У меня ошибка, я отредактировал оригинал сообщения с сообщением – TheGuyWithStreetCred

+1

@ user2202368 Я не заметил его раньше, отредактировал. –

+0

спасибо, я просто учился тестировать, теперь он работает :) – TheGuyWithStreetCred

Смежные вопросы