Возвращаемый тип ASSERT_TRUE () не соответствует типу функции в gtest

Когда я использую ASSERT_TRUE() предоставляется в Gtest Я получаю ниже ошибки.
return type does not match function type с подчеркиванием в VS 2010.,

abc.h

#include "gtest\gtest.h"
class abc {
pubilc:
bool fun();
private:
bool fun1();
};

abc.c

bool abc::fun()
{
ASSERT_TRUE(fun1()); // Getting error: return type does not match function type
}

bool abc::fun1()
{
return true; // True or false depanding on operation
}

8

Решение

Здесь нет return заявление, указанное в fun() но это возвращает bool, Добавить return false; или же return true; в fun() или измените его тип возврата на void:

void abc::fun()
{
ASSERT_TRUE(fun1());
}

На основе Мой компилятор жалуется, что конструктор (или деструктор) не может вернуть значение. В чем дело? который гласит (дословно):

Из-за особенностей C ++ для поддержки синтаксиса потоковой передачи сообщений в ASSERT_ *, например,

ASSERT_EQ(1, Foo()) << "blah blah" << foo;

нам пришлось отказаться от использования ASSERT * и FAIL * (но не EXPECT * и ADD_FAILURE *) в конструкторах и деструкторах. Обходной путь — переместить содержимое вашего конструктора / деструктора в приватную функцию-член void или переключиться на EXPECT _ * (), если это работает. Этот раздел в руководстве пользователя объясняет это.

return тип должен быть void в функциях, которые используют ASSERT_*() макросы.

3

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

ASSERT_TRUE это макрос. Когда развернуто это будет содержать ветвь как:

if (fun1() == false) {
return;
}

Вот как ASSERT_TRUE делает упор на неудачу, но это также означает, что ваш метод bool abc::fun() теперь имеет void обратный путь выхода, конфликтующий с его подписью.

Возможные исправления включают не использовать жесткие стоп-заявления:

bool abc::fun(){
bool result = fun1();
EXPECT_TRUE(result); //No return in expansion
//No hard stop!
return result;
}

или измените тип возвращаемого вами метода, если он не нужен:

void abc::fun(){
ASSERT_TRUE(fun1()); //Hard stop on failure
}

или вернуть по ссылке:

void abc::fun(bool &outResult){
outResult = fun1();  //return result by reference
ASSERT_TRUE(result);
}
15

fun метод имеет bool тип возврата, так что все еще нужно return что-то.

ASSERT_TRUE это макрос, который проверяет, что что-то верно, он не будет вызывать return для вас. На самом деле, вы можете иметь много ASSERT_TRUE подряд и (при условии, что они все верны) все они будут выполняться один за другим. Думать о ASSERT_TRUE макрос как вызов функции, хотя это и не технически.

Это должно работать:

bool abc::fun()
{
ASSERT_TRUE(fun1());
return true;
}
1
По вопросам рекламы [email protected]