Тест Google (gtest): ASSERT_PREDx и функции-члены класса

Итак, я использую 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

Решение

Первый аргумент 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);
1

Другие решения

Других решений пока нет …