2014-10-08 1 views
1

개별 파일 (지침!)로 작성된 fibonacci 시퀀스에 대한 코드를 테스트하고 싶지만 컴파일 방법을 모르겠습니다.여러 파일을 googletesting

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와 단말기에서 테스트를 실행하려하지만, 내가 뭘 잘못

$ 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 
당신은 프로그램을 컴파일하고 실행하기 위해서 개체 파일을 링크 할 필요가

답변

2

를 가지고 :

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

는 그리고 가장 중요한, 당신은

//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을 위반 정의하고 당신의 MAIN.CPP 파일에 헤더에서 테스트 몸을 이동해야합니다.

+0

오류가 발생했습니다. 원래 게시물을 편집했습니다. – TheGuyWithStreetCred

+1

@ user2202368 이전에 수정하지 못했습니다. –

+0

고마워, 난 그냥 테스트 배우고있어, 지금은 작동합니다 :) – TheGuyWithStreetCred