ASSERT TRUE () le type de retour ne correspond pas au type de fonction dans gtest
quand j'utilise ASSERT_TRUE()
condition Gtest
je suis en dessous de l'erreur.
return type does not match function type
avec un soulignement dans VS 2010.
.
abc.h
#include "gtestgtest.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
}
3 réponses
Il n'y a pas de return
déclaration spécifiée dans fun()
mais il renvoie un bool
. Ajouter un return false;
ou return true;
fun()
ou changer son type de retour en void
:
void abc::fun()
{
ASSERT_TRUE(fun1());
}
basé sur Mon compilateur se plaint qu'un constructeur (ou destructeur) ne peut pas retourner de valeur. Ce qui se passe? qui stipule (textuellement):
en raison d'une particularité de C++, afin de supporter la syntaxe de diffusion des messages à un ASSERT_*, par exemple
ASSERT_EQ(1, Foo()) << "blah blah" << foo;
nous avons dû abandonner L'utilisation D'ASSERT* et FAIL* (mais pas D'EXPECT* et ADD_FAILURE*) dans les constructeurs et les destructeurs. La solution est de déplacer le contenu de votre constructeur/destructeur vers une fonction privée de membre de void, ou de passer à EXPECT_*() si cela fonctionne. Cette section du guide de l'utilisateur, l'explique.
return
doit être void
dans les fonctions qui utilisent des ASSERT_*()
macros.
ASSERT_TRUE
est une macro. Une fois élargi, il contiendra une branche comme:
if (fun1() == false) {
return;
}
c'est de Cette façon ASSERT_TRUE
fait un arrêt sur l'échec, mais il signifie également que votre méthode bool abc::fun()
a maintenant un void
chemin de sortie de retour, en conflit avec sa signature.
les correctifs possibles incluent ne pas utiliser les affirmations de stop:
bool abc::fun(){
bool result = fun1();
EXPECT_TRUE(result); //No return in expansion
//No hard stop!
return result;
}
ou modifier vos méthodes de type de retour si pas besoin:
void abc::fun(){
ASSERT_TRUE(fun1()); //Hard stop on failure
}
ou retour par la référence:
void abc::fun(bool &outResult){
outResult = fun1(); //return result by reference
ASSERT_TRUE(result);
}
fun
méthode bool
type de retour pour qu'il ait encore besoin de return
quelque chose.
ASSERT_TRUE
est une macro qui teste que quelque chose est vrai, elle n'appellera pas Retour pour vous. En fait, vous pouvez en avoir beaucoup!--4--> dans une rangée, et (à condition qu'ils soient tous vrais) ils vont tous exécuter l'un après l'autre. Pensez à l' ASSERT_TRUE
macro comme appel de fonction, même si ce n'est pas techniquement.
Cela devrait fonctionner:
bool abc::fun()
{
ASSERT_TRUE(fun1());
return true;
}