2014-02-24 27 views
0

我得到了以下测试来做我想做的事。谷歌测试 - 比较一个数组作为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> 
    ] 

这是有道理的我猜,但我不能找到一种方法来解决这个问题,其中的参数是一个void *,它应该在这里。有没有可能解决这个问题?

回答

0

你使用ElementsAreArray容器匹配不正确地void*

尝试从here

0

ElementsAreArray需要找到void*正确的匹配取消引用参数指针来比较它,并且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)));