2014-04-15 2 views
0

단위 테스트 사례를 작성하는 데 유용한 다른 명명 된 함수를 생성하고 싶습니다. 기본적으로 각 단위 테스트 케이스에 고유 한 이름을 부여하기 위해이 작업을 수행하려고합니다.C++ 자동 __COUNTER__을 사용하여 다른 명명 된 함수 생성

단위 테스트 사례 작성을 위해 Google 테스트 프레임 워크을 사용하고 있습니다. 유닛 테스트 케이스를 작성하려면 TEST_Macro을 사용해야합니다. 모든 단위 테스트에 자동으로 증분 숫자를주고 싶습니다.

#include <iostream> 
using namespace std; 

#define join(x, y) x## y 

void join(test, __COUNTER__)() 
{ 
    cout << "\n 1"; 
} 

void join(test, __COUNTER__)() 
{ 
    cout << "\n 2"; 
} 

int main() 
{ 
    cout << "Hello world!" << endl; 

    test0() ; 
    test1() ; 

    return 0; 
} 

__COUNTER__를 사용하여 고유의 함수 이름을 생성하는 올바른 방법은 무엇입니까 : 여기

내 (비 작동) 코드?

+0

어떤 방식으로 작동하지 않는지 설명해 주시겠습니까? –

+0

아마도 실제 테스트를 작성하는 작업은 번호를 매기는 것 이상의 의미가 있으므로 손으로 테스트 해 봅니다. 그렇게하면 숫자에 몇 가지 의미를 부여 할 수 있습니다. 1xxxxxx는 기본 사항이며 ..., 9xxxxxx는 오슬 세제입니다. 13xxxxx는 문자열 처리, 15xxxxx 메모리 관리 등입니다. – vonbrand

답변

6

그래서 이전의 "매크로 인수 평가 전에 붙여 넣기가 발생했습니다"이므로 test0 대신 test__COUNTER__를 얻습니다.

#define expandedjoin(x,y) x##y 
#define join(x, y) expandedjoin(x, y) 

(당신이 coutvoid 기능을 전달하기 때문에 코드의 나머지 오류를 많이 제공 좋지 않다)

전체 :

당신은 중첩 된 매크로를 할 필요가 작업 코드 :

#include <iostream> 
using namespace std; 
#define expandedjoin(x,y) x##y 
#define join(x, y) expandedjoin(x, y) 

void join(test, __COUNTER__)() 
{ 
    cout << "\n 1"; 
} 

void join(test, __COUNTER__)() 
{ 
    cout << "\n 2"; 
} 

int main() 
{ 
    cout << "Hello world!" << endl; 

    test0(); 
    test1(); 

    return 0; 
} 
+0

위대한! 답변 감사합니다 – Vijay