好的,我正在使用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)’
我想知道这是否有好的工作?我总是可以使用带有全局变量的函数,但我不确定它是否有单行方式。
答案 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);