Как я могу проверить отчет о яшме?

Я хочу проверить все отчеты яшмы моего приложения. Я хочу, чтобы иметь возможность обнаруживать:

  • Проблемы с компиляцией (будет ли проверка того, что JasperCompileManager.compileReport(some inputStream) не выбрасывает JRException, является хорошим вариантом для этого?)
  • Проблемы с заполнением (будет ли проверка того, что JasperFillManager.fillReport(someReport, someParameters, someDataSource) не выбрасывает JRException, является хорошим вариантом для этого?)
  • Проблемы с отображением: обнаружение строк "null", усечение текста в экспортированном файле PDF
  • Любая другая идея?

В идеале я бы хотел, чтобы процесс тестирования был наиболее общим. Дело в том, что у каждой яшмы есть другой источник данных, поэтому для обнаружения этих ошибок мне нужно сгенерировать в списке некоторые данные (правильно?), И эти данные, которые мне нужно сгенерировать, различны для каждой яшмы моего приложения. Поэтому я не знаю, сколько кода тестирования я смогу повторно использовать. Какой подход вы бы взяли?

Спасибо!

Ответы

Ответ 1

Для задач компиляции одним из способов было бы использовать инструмент iReport, и все шаблоны отчетов успешно компилируются; предполагая, что вы используете шаблоны, а затем заполняете данные.

Я нашел ссылку полезной,

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

Надеюсь, что это поможет,

Манж

Ответ 2

Я создал пару unit test для тестирования.

  • Проблемы с компиляцией: я создал класс для загрузки и компиляции всех моих шаблонов. Моя окружающая среда основана на Интернете. Поэтому я протестировал и этот путь.

  • Для заполнения: я издевался над данными и JRDataSource, чтобы заполнить шаблон, который работает для меня.

  • Для рендеринга: я не нашел подходящего подхода для этого. Кто-нибудь получил идеи?

Кроме того, я обычно использую источник данных JavaBean, чтобы тестировать отчеты с помощью традиционного метода java unit test.

Ответ 3

Для автоматической компиляции вы можете попытаться скомпилировать отчеты с помощью Ant script (см. 1 или http://jasperreports.sourceforge.net/api/net/sf/jasperreports/ant/package-summary.html)

Задача

Ant подходит для использования в автоматическом здании или в системе непрерывной интеграции, такой как maven или jenkins.

Ответ 4

Одним из подходов для рендеринга может быть экспорт отчета в PDF, а затем использование чего-то типа PDFBox (Apache) для проверки содержимого. Также вы можете сделать то же самое с экспортом в файл Excel, а затем использовать Apache POI или JExcelAPI для проверки содержимого ячеек.

Привет

Фрэн

Ответ 5

Что касается подхода PDFbox для проверки содержимого PDF-документов: я только что открыл проект open-source jPdfUnit, который очень помогает:

Ознакомьтесь с документами здесь: http://jpdfunit.sourceforge.net/docs/GettingStarted.html

Он основан на junit 3 и не поддерживается в течение многих лет, но он просто работает. Одна настройка, которую я должен был применить для ее работы, заключалась в том, чтобы установить версию pdfbox версии 1.8.13. Просто поместите это в свое, если вы используете 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>

Ответ 6

Для проблем с компиляцией и для заполнения проблем: Да, вы можете сделать так, как описано, и просто попытаться скомпилировать и заполнить отчет. Если это не выбрасывает исключение, то вы в порядке.

Для третьего этапа проверки проблем рендеринга я экспортирую отчет в XML:

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

Теоретически XML является точным представлением PDF файла, но в формате, который легко читается в тестах. Например. если поле слишком длинное, а контент усечен, то он также усекается в XML. Все значения уже находятся в "визуализированном" формате, поэтому, если вы, например, есть число, которое вы форматируете с помощью (DecimalFormat) -паттерна, затем число будет отформатировано в XML. Кроме того, идентификаторы uuid для полей все еще присутствуют в XML, поэтому вы также можете легко найти поля. Чтобы проверить поле, вы можете, например, сделайте что-то вроде:

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