Итак, я использую 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)’
Мне было интересно, если бы была хорошая работа для этого? Я всегда могу использовать функцию с глобальной переменной, но я не был уверен, есть ли обход в одну строку.
Первый аргумент ASSERT_PRED1(pred1, val1);
должен быть вызываемым объектом; унарная функция или функтор.
Например, если вы можете использовать лямбды C ++ 11, вы можете сделать:
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);
Других решений пока нет …