2017-09-28 2 views
1

을 받아들이는 방법을 나는 방법 어떤을 가진 클래스는 변수 인수를 허용 한 :GMOCK 변수 인수

error: 'Result' in 'struct testing::internal::Function<void(const char*, ...)>' does not name a type 
    MOCK_METHOD1(myprint, void (const char* format, ...)); 
^
error: incomplete type 'testing::internal::Function<void(const char*, ...)>' used in nested name specifier 
error: incomplete type 'testing::internal::Function<void(const char*, ...)>' used in nested name specifier 
error: template argument 1 is invalid 
error: field 'gmock1_print_15' has incomplete type 'testing::internal::FunctionMocker<void(const char*, ...)>' 

어떻게 변수 인수를 매개 변수로 사용하는 메소드를 조롱 할 수 있습니까?

답변

1

불행하게도, 당신 cannot directly mock a variadic function in Gmock이 :

당신은 가변 기능을 모의 할 수없는 (즉, 함수 줄임표 (...) 인수 복용) 직접 구글 모의에 있습니다.

문제는 일반적으로 모의 객체가 가변 인수에 전달되는 인수의 개수와 인수의 유형이 무엇인지를 알 수있는 방법이 없다는 것입니다. 기본 클래스의 작성자 만 프로토콜을 알고 있으므로 우리는 그의 머리를 들여다 볼 수 없습니다.

따라서 이러한 함수를 모의하려면 사용자는 모의 객체에 인수의 수와 유형을 파악하는 방법을 가르쳐야합니다. 이를 수행하는 한 가지 방법은 함수의 오버로드 된 버전을 제공하는 것입니다.

줄임표 인수는 C에서 상속되며 실제로는 C++ 기능이 아닙니다. 그들은 사용하기에 안전하지 않으며 생성자 또는 소멸자가있는 인수로는 작동하지 않습니다. 따라서 C++에서 가능한 한 많이 사용하지 않는 것이 좋습니다.

그러나 Nemelis은 (는) 이것을 달성하기 위해 사용할 수있는 some workaround을 제안했습니다. format 인수를 임의의 가변 인수와 함께 처리하여 단일 message 문자열을 만든 다음 message을 단일 인수로 취하는 함수를 조롱합니다.

+0

포인터 주셔서 감사합니다 - 내 문제를 해결했습니다. – Prakash