2010-08-04 42 views
13

Tôi muốn kiểm tra tất cả các báo cáo jasper trong đơn đăng ký của mình. Tôi muốn để có thể phát hiện:Tôi làm cách nào để kiểm tra báo cáo jasper?

  • vấn đề Compilation (Would kiểm tra rằng JasperCompileManager.compileReport(some inputStream) doesn't ném JRException là một lựa chọn tốt cho việc này?)
  • vấn đề Điền (Would kiểm tra rằng JasperFillManager.fillReport(someReport, someParameters, someDataSource) doesn't ném JRException là một lựa chọn tốt cho việc này?)
  • Sự cố hiển thị: phát hiện các chuỗi "rỗng" xuất hiện, văn bản trông bị cắt bớt trong tệp PDF đã xuất
  • Bất kỳ ý tưởng nào khác?

Lý tưởng nhất là tôi muốn giữ cho quy trình thử nghiệm có thể chung chung nhất có thể. Vấn đề là mỗi jasper có một nguồn dữ liệu khác nhau để phát hiện lỗi này tôi cần phải tạo ra trong danh sách một số dữ liệu (phải không?) Và dữ liệu này tôi cần để tạo ra là khác nhau cho mỗi jasper của ứng dụng của tôi. Vì vậy, tôi không biết bao nhiêu mã thử nghiệm tôi sẽ có thể tái sử dụng. Bạn sẽ tiếp cận phương pháp nào?

Cảm ơn!

Trả lời

2

Đối với các sự cố biên dịch, một cách tiếp cận sẽ là sử dụng công cụ iReport và tất cả các mẫu báo cáo được biên dịch thành công; giả sử rằng bạn đang sử dụng các mẫu và sau đó điền dữ liệu vào nó.

tôi thấy đường dẫn sau hữu ích,

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

Hy vọng rằng sẽ giúp,

Manju

+0

Liên kết không còn khả dụng –

2

Tôi tạo ra một vài thử nghiệm đơn vị cho các lĩnh vực thử nghiệm.

  1. Sự cố về biên dịch: Tôi đã tạo một lớp để tải và biên dịch tất cả các mẫu của mình. Môi trường của tôi là dựa trên web. Vì vậy, tôi đã thử nghiệm con đường thông qua điều này là tốt.

  2. Để điền: Tôi đã nhập dữ liệu và JRDataSource điền vào mẫu, tác phẩm tìm thấy cho tôi.

  3. Để hiển thị: Tôi không tìm thấy phương pháp hay để thực hiện. Bất cứ ai có ý tưởng?

Ngoài ra, tôi thường sử dụng nguồn dữ liệu JavaBean để tôi có thể kiểm tra báo cáo bằng phương pháp thử nghiệm đơn vị java truyền thống.

1

Một cách tiếp cận để hiển thị có thể là xuất báo cáo sang PDF và sau đó sử dụng một cái gì đó như PDFBox (Apache) để kiểm tra nội dung. Ngoài ra bạn có thể làm tương tự với việc xuất sang tệp Excel và sau đó sử dụng Apache POI hoặc JExcelAPI để kiểm tra nội dung ô.

Trân

Fran

0

Về cách tiếp cận PDFbox để kiểm tra nội dung của các tài liệu PDF: Tôi chỉ phát hiện ra dự án jPdfUnit opensource giúp rất nhiều:

Kiểm tra các tài liệu ở đây: http://jpdfunit.sourceforge.net/docs/GettingStarted.html

Nó dựa trên junit 3 và hasen't được duy trì trong nhiều năm, nhưng nó chỉ hoạt động. Một tinh chỉnh mà tôi đã áp dụng để làm việc đó là đặt phiên bản pdfbox thành 1.8.13. Chỉ cần đặt điều này trong của bạn nếu bạn đang sử dụng 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

Đối với vấn đề biên soạn và điền vào các vấn đề: Có, bạn có thể làm như mô tả và chỉ cần cố gắng biên dịch và điền vào báo cáo. Nếu điều đó không ném một ngoại lệ, thì bạn ổn.

Đối với bước thứ ba kiểm tra vấn đề render, tôi xuất báo cáo để XML:

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

Về mặt lý thuyết XML là đại diện chính xác của tập tin PDF, nhưng trong một định dạng đó là dễ dàng để đọc trong các thử nghiệm . Ví dụ. nếu một trường quá dài và nội dung bị cắt bớt, thì nó cũng bị cắt ngắn trong XML. Tất cả các giá trị đã ở định dạng "được hiển thị", vì vậy nếu bạn, ví dụ: có một số mà bạn định dạng với một mẫu (DecimalFormat), sau đó số sẽ được định dạng trong XML. Ngoài ra, các định danh uuid cho các trường vẫn tồn tại trong XML, vì vậy bạn cũng có thể dễ dàng tìm thấy các trường. Để kiểm tra một trường, bạn có thể, ví dụ: làm điều gì đó dọc theo các dòng:

hasXPath("//*[@uuid = '" + field.getUuid() + "']/../*[local-name() = 'textContent']", matcher) 
Các vấn đề liên quan