En comparant à une chaîne codée en dur avec des citations en C++
Je suis en train d'écrire une fonction c++ pour générer des données XML à l'aide de TinyXML. J'aimerais vérifier qu'une (petite) de l'arbre produit par ma fonction est transformé en une chaîne identique à une chaîne de référence.
//intended XML:
<element type="correct" />
Il semble que la meilleure façon de faire de cette comparaison est de coder en dur la chaîne de référence dans le code:
//assignment
std::string intended = "<element type=\"correct\" />";
Toutefois, les barres obliques inverses pour échapper les guillemets éviter la comparaison de réussir.
#include <tinyxml.h>
#include <string.h>
TiXmlElement test = TiXmlElement("element");
test.SetAttribute("type", "correct");
TiXmlPrinter printer;
test.Accept(&printer);
ASSERT_EQ(intended, printer.CStr()); //gtests macro
de sortie:
Value of: printer.CStr()
Actual: "<element type="correct" />"
Expected: intended
Which is: "<element type=\"correct\" />"
Les barres obliques inverses ne sera pas de la partie de la chaîne avec le code vous ai montré ici. Autre chose doit se passer. ideone.com/3H9PB7
Vous pourriez essayer de
Peut-être les chaînes de caractères sont codés différemment. Essayez de la sortie boths des chaînes de caractères (c'est à dire en utilisant std::cout), de sorte que vous pouvez voir exactement ce que
Les chaînes ne se comparent égales si elles ont un nombre différent d'espaces, l'un contient un
Vous pourriez essayer de
printf()
(ou quelque chose de similaire) la valeur de printer.CStr()
dans une autre variable (ou flux) pour voir si elle obtient ensuite correctement mis en forme pour correspondre à votre cas de test.Peut-être les chaînes de caractères sont codés différemment. Essayez de la sortie boths des chaînes de caractères (c'est à dire en utilisant std::cout), de sorte que vous pouvez voir exactement ce que
printer.CStr()
et intended
ressembler.Les chaînes ne se comparent égales si elles ont un nombre différent d'espaces, l'un contient un
'\t'
où l'autre a un simple ' '
, ou si on finit dans '\n'
et l'autre ne l'est pas.OriginalL'auteur tasteslikelemons | 2014-03-12
Vous devez vous connecter pour publier un commentaire.
Sur le googletest Apprêt page, j'ai lu que
ASSERT_EQ()
compare les pointeurs. (qui ne sont égales si elles pointent vers le même emplacement de mémoire). Si vous voulez comparer des chaînes de caractères, vous devez utiliserASSERT_STREQ()
.Parfait. En faisant ce changement, j'ai aussi remarqué que ASSERT_STREQ prend des pointeurs sur des coûts des tableaux de char--probablement pour empêcher exactement le genre de représentation, les différences sont une source de confusion pour moi.
Je voudrais parler de la casse des assertions
ASSERT_STRCASEEQ
etASSERT_STRCASENE
même si c'est hors de question de la portée de l'OriginalL'auteur wimh