J'ai une fonction C++ qui renvoie une ligne multiple std::string
. Dans le cas de test pour cela, je compare chaque ligne contre la valeur connue - quelque chose comme:Diff-chaîne de base pour le cas de test C++
std::string known = "good\netc";
std::string output = "bad\netc";
std::vector<std::string> knownvec;
pystring::splitlines(known, knownvec); // splits on \n
std::vector<std::string> outvec;
pystring::splitlines(output, outvec);
CHECK_EQUAL(osvec.size(), resvec.size());
for(unsigned int i = 0; i < std::min(outvec.size(), knownvec.size()); ++i)
CHECK_EQUAL(pystring::strip(outvec[i]), pystring::strip(knownvec[i]));
Cela fonctionne, mais disons une seule nouvelle ligne est ajoutée, toutes les assertions CHECK_EQUAL suivantes échouent, ce qui est de faire la sortie est difficile à lire
Existe-t-il un meilleur moyen de comparer les deux chaînes, idéalement de façon autonome (ie ne pas lier avec giantdifflib, ou écrire les chaînes dans un fichier et appeler la commande diff
!)
[Editer] J'utilise OpenImageIO's rather simple unittest.h
Les données comparées sont principalement des tables YAML ou des tables de recherche de couleurs. Here's an example test case - essentiellement quelques lignes d'en-têtes, puis beaucoup de chiffres:
Version 1
Format any
Type ...
LUT:
Pre {
0.0
0.1
...
1.0
}
3D {
0.0
0.1
...
1.0
}
Quelle structure de test unitaire utilisez-vous? –
Si une correspondance de chaîne unique échoue, voulez-vous "resynchroniser" la chaîne correspondant plus bas comme le fait "diff"? –
Il utilise UnitTest ++, ce qui est génial. En aparté, vous ne devez pas omettre les parenthèses de portée autour d'une macro. Utilisez pour (;;) {CHECK_EQUAL (...); } au lieu de (;;) CHECK_EQUAL (...); –