2017-11-12 2 views
2

TEST에 DefaultValue<int>::Set(10)을 넣으면 모든 것이 잘 작동하지만 외부에 놓으면 오류가 발생합니다. 뭐가 잘못 되었 니? 근본 원인?gmock에서 DefaultValue로 범위 문제가 있습니다

using ::testing::DefaultValue; 
struct Foo { 
    MOCK_METHOD0(doWork, int()); 
}; 

DefaultValue<int>::Set(10); // error: specializing member 'testing::DefaultValue<int>::Set' requires 'template<>' syntax; 

TEST(BarTest, DoesThis) { 
    Foo foo; 
    DefaultValue<int>::Set(10); // everything works fine. 
    EXPECT_CALL(foo, doWork()); 
    foo.doWork(); 
} 

답변

1

DefaultValue<int>::Set(10)은 함수 호출입니다. 그것은 진술이고 일반적으로 진술은 네임 스페이스 범위에서 독자적으로 나타날 수 없습니다.

함수의 범위에 넣는 것은 괜찮습니다. 그것이 그 이유입니다. 리팩터링하기를 원할 수도 있지만, 스위트를 테스트하기 전에 한 번만 실행됩니다 (결국 글로벌 기본값을 갖는 시점입니다).

컴파일러의 혼란으로 인해 함수 밖에서 오류가 발생하는 것입니다. DefaultValue<int>의 멤버 함수를 특수화하려는 것처럼 보이므로 컴파일러는 사용자의 의도가 수행 할 수없는 작업을 수행한다는 것을 모릅니다. 진단은 전문 분야에서 정직한 실수를 저질렀다면 올바른 일을하도록 돕는 의미로 표현됩니다.

+0

아하 ..., 감사합니다, 스토리 텔러, 나의 나쁜. 당신의 지적을 한 후에, 그것은 나에게 분명합니다. 그러나 나는 그 길을 생각할 수 없었습니다. 그러한 실수에 대한 설명이 있습니까? – pepero

+0

@pepero - "파일 범위에서 코드 실행"을 찾으려면 인용문을 찾으십시오. – StoryTeller

관련 문제