谷歌测试(gtest): ASSERT_PREDx和类成员函数

Google Test (gtest): ASSERT_PREDx and class member functions

本文关键字:PREDx 成员 函数 ASSERT 测试 gtest 谷歌      更新时间:2023-10-16

好的,所以我使用gtest进行单元测试,我有一些我想做的事情:

class A {
    /* Private members */
public:
    bool function_to_test(int index);
}
在test函数中,我想使用:
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)’

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

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

例如,如果你可以使用c++ 11 lambda,你可以这样做:

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