Gmock Matcher与类型匹配

Gmock matcher to match against type

本文关键字:类型 Matcher Gmock      更新时间:2023-10-16

在gmock中是否有任何类型而不是价值匹配?该课程类似:

struct Blob {
    template<class T> bool is(); // if blob holds data of type T
    template<class T> T get(); // get data as type T
}

我的匹配器看起来像这样:

MATCHER_P(BlobIs, T, "") {
    return arg->is<T>();
}

,但构建失败了:

error: expected primary-expression before ')' token

您可以使用通配符匹配器A<type>An<type>(文档(:

EXPECT_CALL(foo, Describe(A<const char*>()))
    .InSequence(s2)
    .WillOnce(Return("dummy"));

您不能将类型作为参数传递给任何函数 - 包括MATCHER_P宏生成的函数。

但是您可以通过将使用正确类型的lambda(功能对象(。

喜欢这里:

MATCHER_P(BlobIsImpl, isForForType, "") {
    return isForType(arg);
}

使用以下功能模板 - 您将实现所需的目标:

template <typename T>
auto BlobIs()
{
     auto isForType = [](Blob& arg) -> bool 
     { 
         return arg->template is<T>();
     };
     return BlobIsImpl(isForType); 
}

使用这样的使用:BlobIs<SomeType>()

2个问题:

  1. 您必须使用template关键字来指定is是函数模板。更多信息在这里
  2. 您应该将is定义为const函数。