Google Test(gtest):ASSERT_PREDx和类成员函数

时间:2013-01-18 14:56:23

标签: c++ assert googletest class-members

好的,我正在使用gtest进行单元测试,而且我有一些我想做的事情:

class A {
    /* Private members */
public:
    bool function_to_test(int index);
}

在测试功能中,我想使用:

A testEntity;
const int b = 40;
ASSERT_PRED1(testEntity.function_to_test, b);

这不起作用,因为ASSERT_PREDx似乎是为全局范围函数设计的。我收到了

的消息
argument of type ‘bool (A::)(int) {aka bool (A::)(int)}’ does not match ‘bool (A::*)(int)’

我想知道这是否有好的工作?我总是可以使用带有全局变量的函数,但我不确定它是否有单行方式。

1 个答案:

答案 0 :(得分:1)

ASSERT_PRED1(pred1, val1);的第一个参数应该是一个可调用的对象;一元函数或函子。

例如,如果你可以使用C ++ 11 lambdas,你可以这样做:

ASSERT_PRED1([&testEntity](int i) { return testEntity.function_to_test(i); }, b);

或者如果你想使用一元函数助手:

struct TesterA : public std::unary_function <int, bool> {
  explicit TesterA(A& a) : a_(a) {}
  bool operator()(int i) { return a_.function_to_test(i); }
  A& a_;
};

ASSERT_PRED1(TesterA(testEntity), b);