Google测试 - 将数组作为void *参数进行比较

时间:2014-02-24 10:04:49

标签: c++ googletest void-pointers

我接受了以下测试,以达到我想要的目的。

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 *,它应该在这里。有没有可能解决这个问题?

2 个答案:

答案 0 :(得分:0)

您使用ElementsAreArray

错误地使用void*容器匹配器

尝试从here

中找到void*的正确匹配器

答案 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)));