Actuellement, j'ai un programme qui lit et extrait de multiples pièces de données d'un fichier, et je voudrais assurer que ces valeurs correspondent correctement aux valeurs attendues, je suis au courant de la manière dont cela devrait fonctionner dans d'autres langages de programmation. Tels que Python avec des listes et des tuples, etc. Cependant, je ne suis pas sûr de la meilleure approche pour utiliser des tests unitaires au sein de C ++ tout en maintenant le code aussi minimal et efficace que possible. J'ai actuellement plusieurs tableaux que je souhaite que je souhaite vérifier qu'ils répondent à leurs valeurs attendues afin que je puisse tester le programme avec des fichiers d'entrée différents.
Pour décrire cela, en substance, je souhaite vérifier le contenu de par exemple. p> est égal à
{11, 12, 13, 14, 15} P> et pour compléter le test de l'unité avec succès si les valeurs sont égales et échouer s'ils ne sont pas égaux ou non dans le même ordre. Ainsi, je cherche la meilleure méthode à aborder cela. p> p>
3 Réponses :
Utilisez un C ++ ou pour C ++ 11 et C ++ 14: p> std :: Array code> à la place et vous obtiendrez la prestation de toutes les méthodes qu'il expose, comme
opérateur == code>:
Il devrait être std :: Array
@Omid pas nécessaire dans C ++ 17 et OP n'a pas spécifié la version. Mais je l'ai ajouté pour le rendre clair.
std :: Mismatch () Code>
obtiendra le travail effectué et fournit plus d'informations que std :: égal code>. Cela fonctionnera avec les compilateurs pré-c ++ 11 si vous modifiez
auto code> sur
std :: paire
arrayone code> est un type de tableau (il pourrait Decay à Un pointeur si vous le transmettez comme un argument de fonction). Il nécessite C ++ 11 en raison de l'utilisation de
auto code> et
std :: COMMENDRE (COMMENDRE (COMMENCE> P>
#include <algorithm>
#include <iterator>
int expectedResult[5] = {11, 12, 13, 14, 15};
auto res = std::mismatch(std::begin(arrayone), std:end(arrayone), std::begin(expectedResult));
if(res.first != std::end(arrayone)) {
std::cout << "Arrays not matching at " << std::distance(arrayone, res.first) << ", expected: " << *res.second << ", got: " << *res.first;
}
Pourriez-vous être amélioré avec STD :: Begin (Arrayone), STD :: Fin (Arrayone)? Il suffit de tirer de la mémoire. Ou utilisez Taillef pour calculer le nombre d'éléments.
J'aime cette réponse car il utilise des fonctionnalités modernes, mais reste compatible avec l'ancien code. (Bien que OP ait dit «la meilleure approche» afin que les réponses toutes modernes soient justes, aussi)
Si vous insistez sur le fait que vous ne devez pas utiliser la STL et utiliser des primitives, cette question est une question C, car elle n'utilise pas les fonctionnalités C ++. Si vous pouvez supposer en toute sécurité qu'ils étaient de taille n em>, les suivants doivent être ok. donné deux tableaux d'entiers primitifs de taille n, la mise en œuvre générale serait p> en général, STD :: Array serait une meilleure idée que l'ancienne c- Les matrices de style, mais ma compréhension de la question n'est pas claire, si vous pouvez utiliser la STL, les autres solutions sont supérieures. P> Edit: Au cas où il est difficile de savoir ce que certains problèmes avec la solution ci-dessus sont les suivants: p> Si vous voulez un peu une solution meilleure, en utilisant Memcmp A> Comme suggéré dans les commentaires (cela n'utilise pas les bibliothèques au mieux de mes connaissances): p> pour deux tableaux de type x em> et taille n < / em>, vous pouvez dire simple dire p>
MEMCMP serait similaire
@Kennyostrom tu as raison. En fait, MemCMP est en fait meilleur pour une variété de raisons. Ma solution particulière n'est pas une bonne réponse, mais je pensais que ce serait un exemple très simple et facile sur la comparaison des tableaux. Si l'affiche originale souhaite une implémentation MEMCMP, je l'ai ajoutée ci-dessus =)
Utilisez-vous un cadre de test unitaire? (Googletest, igloo, cppunit)? Ou vous voulez juste une réponse standard C ++?
Vous n'avez pas besoin de tester le code tel que
int arrayone [5] = {11, 12, 13, 14, 15}; code>, plus que vous devez tester
int x = 0; code>.
Utilisez
std :: Array code> et opérateur ==
On dirait qu'un emploi pour
std :: égal code>
. Ou vous pouvez utiliser unstd :: Array code>
plutôt.Je vise à essayer de le faire en utilisant c ++ sans utiliser d'autres cadres si possible.
@ ashwood23 essayez-vous d'éviter le stl? Insistez-vous sur l'utilisation des primitives? Si oui, sont-ils garantis comme étant la même taille?
La meilleure approche consiste à utiliser le conteneur approprié (par exemple vectoriel ou tableau) et à utiliser son opérateur == () à comparaison.