0

好的,所以我正在使用 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)’

我想知道是否有一个很好的解决方法?我总是可以使用带有全局变量的函数,但我不确定是否有一种单行方式。

4

1 回答 1

1

第一个参数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);
于 2013-01-19T06:15:48.947 回答