2015-11-16 1 views
0

J'ai des cas de test définis dans une feuille Excel. Je lis une chaîne de cette feuille (mon résultat attendu) et la compare à un résultat que j'ai lu dans une base de données (mon résultat actuel). J'utilise ensuite AssertEquals (expectedResult, actualResult) qui imprime toutes les erreurs dans un fichier journal (j'utilise log4j), par exemple. Je reçois java.lang.AssertionError: Sortie différente attendue: < 10> mais était: < 7> en conséquence.Junit: retour de chaîne pour AssertEquals

Je dois maintenant écrire ce résultat dans la feuille Excel (celle qui définit les cas de test). Si seulement AssertEquals renvoyait String, avec le texte AssertionError, ce serait génial, car je pourrais juste l'écrire immédiatement dans ma feuille Excel. Comme il revient vide bien que je sois coincé.

Est-il possible de lire l'AssertionError sans analyser le fichier journal?

Merci.

Répondre

1

Je pense que vous utilisez incorrectement junit ici. C'est pourquoi

  • assertEquals pas assertEquals (;))
  • vous ne devriez pas besoin de se connecter. Vous devriez juste laisser les assertions faire leur travail. Si tout est vert alors vous êtes bon et vous n'avez pas besoin de vérifier un journal. Si vous obtenez du bleu ou du rouge (couleurs d'éclipse :), alors vous avez des problèmes à regarder. Le bleu est l'échec, ce qui signifie que vos affirmations sont fausses. Par exemple vous obtenez 7 mais attendez 10. Rouge signifie erreur. Vous avez un pointeur nul ou une autre exception qui se lance pendant que vous exécutez
  • Vous devez lire un fichier Excel ou une base de données pour les tests unitaires. Si vous avez vraiment besoin de coordonner avec d'autres systèmes alors vous devriez essayer et stub or mockthem. Avec le test unitaire, vous devriez essayer de tester la méthode dans le code
  • si vous êtes bootstrap sur JUnit pour essayer de comparer une feuille Excel et une base de données, alors je voudrais aussi exporter la table dans Excel et faire juste une comparaison en excel entre les colonnes
+0

Salut RNJ, merci pour votre réponse. Ce que je fais est de tester de nombreuses combinaisons pour un système particulier (par exemple un test particulier pourrait avoir 10 000 combinaisons de différentes valeurs de paramètres, c'est-à-dire 10 000 lignes dans ma feuille Excel). Par conséquent, j'ai une méthode de test (annotée avec @Test) qui contient une boucle, et après un traitement, je passe la valeur attendue (récupérée de mes cas de test Excel) et la valeur réelle (récupérée de ma base de données) à assertEquals. J'écris ensuite le résultat de 'PASS' ou 'FAIL' dans ma feuille Excel pour chaque ligne. Cela fonctionne bien et sert bien le but. – Dragonfly

+0

Ce que je voudrais maintenant, c'est simplement récupérer le résultat String de assertEquals pour l'écrire aussi dans ma feuille Excel, de sorte que pour chaque test, outre PASS ou FAIL, je peux aussi voir le résultat assertEquals qui serait génial pour mon utilisateurs ... – Dragonfly

0

Lire/écrire dans des fichiers n'est pas vraiment ce que les tests devraient faire. L'entrée pour les tests doit être définie dans le test, pas dans le fichier externe qui peut changer - cela peut soit introduire des faux négatifs, soit même des faux positifs (rendre vos tests inefficaces tout en donnant une fausse confiance que tout va bien parce que les tests sont vert). Compte tenu de votre commentaire (une boucle avec 10k paramètres différents provenant du fichier), je recommanderais de convertir ce fichier excel en JUnit paramétré test. Vous voudrez peut-être mettre la définition de tableau dans une autre classe, parce que les lignes 10k sont assez nombreuses.

S'il s'agit d'une bureaucratie d'entreprise, et que vous avez besoin de ce fichier Excel, il est logique de ne pas écrire un "test" classique. Je recommande juste une méthode main qui fait le travail - lit le fichier, exécute le code, vérifie la sortie en utilisant if (output.equals(expected)) simple, puis réécrit dans le fichier.

0

Enveloppez vos assertEquals (expectedResult, actualResult) avec essayer prises des prises

catch(AssertionError e){ 
//deal with e.getMessage or etc. 
} 

Mais pas une bonne idée pour certaines raisons, je suppose.

Et essayer google quelque chose comme affirmation douce