2010-08-04 8 views
13

Je veux tester tous les rapports Jasper de mon application. Je veux être en mesure de détecter:Comment puis-je tester un rapport Jasper?

  • Problèmes de compilation (Would vérifier que JasperCompileManager.compileReport(some inputStream) jeter JRException est Indifférent Fume une bonne option pour cela?)
  • problèmes de remplissage (Would vérifier que JasperFillManager.fillReport(someReport, someParameters, someDataSource) jeter JRException est Indifférent Fume une bonne option pour cela?)
  • Problèmes de rendu: détection des chaînes "NULL", texte tronqué dans le fichier PDF exporté
  • Une autre idée?

Idéalement, je voudrais garder le processus de test le plus générique possible. Le fait est que chaque jasper a une source de données différente donc pour détecter ces erreurs, j'ai besoin de générer des données à la liste (à droite?) Et ces données que je dois générer sont différentes pour chaque jaspe de mon application. Donc je ne sais pas combien de code de test je pourrais réutiliser. Quelle approche adopteriez-vous?

Merci!

Répondre

2

Pour les problèmes de compilation, une approche serait d'utiliser l'outil iReport et tous les modèles de rapports sont compilés avec succès; en supposant que vous utilisez des modèles, puis en remplissant les données dans celui-ci.

Je trouve le lien suivant utile,

http://flexingcode.blogspot.com/2009/04/junit-for-jasper-reports.html

espoir qui aide,

Manju

+0

Le lien n'est plus disponible –

2

J'ai créé quelques tests unitaires pour les aspects de test.

  1. Problèmes de compilation: J'ai créé une classe pour charger et compiler tous mes modèles. Mon environnement est basé sur le Web. J'ai donc testé le chemin à travers cela aussi.

  2. Pour le remplissage: J'ai raillé les données et JRDataSource pour remplir un gabarit, ça fonctionne pour moi.

  3. Pour le rendu: Je n'ai pas trouvé une bonne approche pour le faire. Quelqu'un a des idées?

Et aussi, j'utilise généralement la source de données JavaBean afin que je puisse tester les rapports en utilisant une méthode de test d'unité java traditionnelle.

1

Une approche pour le rendu pourrait être d'exporter le rapport au format PDF, puis d'utiliser quelque chose comme PDFBox (Apache) pour tester le contenu. Vous pouvez également faire la même chose avec l'exportation vers un fichier Excel, puis utiliser Apache POI ou JExcelAPI pour tester le contenu de la cellule.

Cordialement

Fran

0

En ce qui concerne l'approche PDFBox pour tester le contenu des documents PDF: Je viens de découvrir le projet opensource jPdfUnit qui aide grandement:

Vérifiez les docs ici: http://jpdfunit.sourceforge.net/docs/GettingStarted.html

Il est basé sur junit 3 et n'a pas été maintenu dans les années, mais ça marche. Un tweak que j'ai dû appliquer pour le faire fonctionner était de mettre la version pdfbox au 1.8.13. Il suffit de mettre dans votre si vous utilisez Maven:

<dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>org.apache.pdfbox</groupId> 
       <artifactId>pdfbox</artifactId> 
       <!-- jpdfunit is not compatible with pdfbox 2 (java5 vs java6) --> 
       <version>1.8.13</version> 
      </dependency> 
     </dependencies> 
</dependencyManagement> 
0

Pour les problèmes de compilation et des problèmes de remplissage: Oui, vous pouvez le faire comme décrit et juste essayer de compiler et remplir le rapport. Si cela ne lance pas une exception, alors vous allez bien.

Pour la troisième étape de vérification des problèmes de rendu, exporter le rapport au format XML:

String xml = JasperExportManager.exportReportToXml(
    JasperFillManager.fillReport(report, params, dataSource) 
); 

En théorie, le XML est une représentation exacte du fichier PDF, mais dans un format qui est facile à lire dans les tests . Par exemple. Si un champ est trop long et que le contenu est tronqué, il est également tronqué dans le fichier XML. Toutes les valeurs sont déjà dans le format "rendu", donc si vous avoir un nombre que vous formatez avec une (DecimalFormat) -pattern, alors le nombre sera formaté dans le XML. De plus, les identifiants uuid pour les champs sont toujours présents dans le XML, vous pouvez donc facilement trouver les champs. Pour vérifier un champ, vous pouvez, par exemple, faire quelque chose dans le genre de:

hasXPath("//*[@uuid = '" + field.getUuid() + "']/../*[local-name() = 'textContent']", matcher) 
Questions connexes