2016-09-18 3 views
0
에 실패

내 googletest는 다음과 같은 구조를 가지고 테스트 실패가있을 때는 서브 루틴

void 
check(Arg a1, Arg a2) 
{ 
    EXPECT_TRUE(a1 == a2); 
} 

TEST(s, t) 
{ 
    a1 = make_arg1(); 
    a2 = make_arg2(); 
    check(a1, a2); 

    a11 = make_arg1(); 
    a22 = make_arg2(); 
    check(a11, a22); 

    ...... many other check() calls ...... 
} 

이제 오류 출력은 단지 검사의 소스 코드 라인을 보여줍니다(), TEST() 줄이 아닙니다.

내가 알고 있는데 유일한 해결책은 다음과 같이 SCOPED_TRACE, 뭔가를 사용하는 것입니다

TEST(s, t) 
{ 
    SCOPED_TRACE("100"); 
    a1 = make_arg1(); 
    a2 = make_arg2(); 
    check(a1, a2); 

    SCOPED_TRACE("200"); 
    a11 = make_arg1(); 
    a22 = make_arg2(); 
    check(a11, a22); 

    ...... many other check() calls ...... 
} 

그러나 모든 SCOPED_TRACE를 추가하는 종류의 지루한, 더 나은 솔루션이 여기에있다?

답변

1

평등을 확인하는 경우 EXPECT_EQEXPECT_TRUE보다 사용하는 것이 더 좋습니다. check()이이 한 줄로 만 구성된 경우 함수를 사용하지 말고 테스트 내에 EXPECT_EQ을 사용하십시오.

check() 함수가 더 복잡하고 & 붙여 넣기를 복사하지 않으려면 함수 대신 항상 매크로를 사용할 수 있습니다.

0

check에 대한 호출을 래핑하는 매크로를 작성하여 SCOPED_TRACE을 추가 할 수 있습니다. 또한, 나는 현재 SCOPED_TRACE을 사용하는 방법이 각 인스턴스에 대한 추적에 추가 될 수 있다고 생각합니다. 그냥 줄 번호를 원하는 추가 정보가 필요하지 않은 경우도 ""msg을 대체 할 수

#define CHECK(msg, ...) \ 
do { SCOPED_TRACE(msg); check(__VA_ARGS__); } while(0) 

:

어쩌면 뭔가를하려고합니다.