我接受了以下测试,以达到我想要的目的。
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 :(得分:0)
答案 1 :(得分:0)
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)));