2014-02-24 1 views
0

나는 내가 원하는 것을하기 위해 다음 테스트를 얻었다.Google 테스트 - void * 매개 변수로 배열 비교

MOCK_METHOD2(write, void(unsigned char*, int)); 


unsigned char bar[] = {1,2,3}; 

EXPECT_CALL(foo, write(_, sizeof(bar))).With((ElementsAreArray(bar))); 

그러나 아래의 함수에 대해 매개 변수 유형을 void *로 변경하면 컴파일되지 않습니다. 오류와

MOCK_METHOD2(write, void(void*, int)); 

:

error C2182: 'abstract declarator' : illegal use of type 'void' 
    gmock-matchers.h(2536) : see reference to class template instantiation 'testing::internal::ElementsAreMatcherImpl<Container>' being compiled 
    with 
    [ 
     Container=const std::tuple<void *,unsigned char> 
    ] 

이 내가 생각 의미가 있습니다,하지만 난 인수가 여기에 있어야 할 무효 *, 여기서이 문제를 해결하는 방법을 찾을 수 없습니다. 이 문제를 해결할 가능성이 있습니까?

답변

0

귀하의 인수 포인터를 비교하는 역 참조에 here

0

ElementsAreArray 요구에서 void*에 대한 올바른 정규를 찾을 수 void*

시도로 잘못 ElementsAreArray 컨테이너 정규를 사용하고 void* 포인터 역 참조 할 수 없습니다. memcmp을 사용자 지정 검색기에 랩핑하여 전달되는 버퍼를 비교해야합니다. void* :

MATCHER_P2(HasBytes, bytes, size, "") { 
    return arg1 == size && memcmp(arg0, bytes, size) == 0; 
} 

EXPECT_CALL(foo, write(_, sizeof(bar))).With(Args<0, 1>(HasBytes(bar, sizeof bar))); 
관련 문제