2009-11-23 49 views
5

Bạn có thể tách các thành phần của ứng dụng IceFaces để chúng có thể được kiểm tra riêng biệt thay vì sử dụng một cái gì đó như Selenium hoặc HttpUnit trên ứng dụng được lắp ráp không?Icefaces thử nghiệm đơn vị

Đậu phụ có thể dễ dàng bị cô lập (nếu được viết là có thể kiểm chứng) nhưng tôi quan tâm đến việc kiểm tra các phần/phần hiển thị của ứng dụng trong khi sử dụng càng ít phần còn lại của ứng dụng càng tốt. Điều này có thể được thực hiện? Làm sao?

Có cách nào để hiển thị đối tượng IceFaces dưới dạng văn bản sử dụng "dữ liệu giả" mà sau đó tôi có thể chạy qua các thử nghiệm đơn vị truyền thống không?

Tôi có thể nghĩ cách để làm tất cả điều này, nhưng chúng liên quan đến việc tạo nhiều ứng dụng (một cho mỗi thành phần tôi muốn kiểm tra). Tuy nhiên, điều này có vẻ như là một cách tối ưu để làm việc.

+1

Đối với tất cả các nhà thiết kế khung tham vọng ... hãy xem xét cách tốt nhất để đáp ứng thử nghiệm trong giai đoạn thiết kế của bạn. :-P –

+0

Amen to that! Nó chắc chắn là một ràng buộc thiết kế để đưa vào tài khoản. – Ryan

Trả lời

1

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, thì việc tạo một hạt đậu giả đặc biệt cho các trang của bạn là đơn giản. Tệp cấu hình JSF ánh xạ các hạt đó tới tệp .jspx. Các hạt giả, tất nhiên, sẽ không liên lạc bất kỳ logic kinh doanh hoặc dịch vụ back-end - họ sẽ chỉ đơn giản là bộ dữ liệu đơn giản mà sẽ dễ dàng để xác minh trong các thử nghiệm của bạn.

Tạo tập lệnh kiến ​​để thay thế trong đậu sao lưu giả và tệp cấu hình thử nghiệm. Chạy thử nghiệm của bạn. Nếu bạn không muốn thứ gì đó nặng như HTTPUnit và nếu bạn đang sử dụng Spring trong ứng dụng của mình, hãy xem this blog post để có cách thức tuyệt vời để tạo ra ngữ cảnh web đầy đủ mà không cần máy chủ web. Các bài kiểm tra của bạn có thể sẽ cần đánh hơi đầu ra HTML thô để xác minh kết quả.Điều này sẽ rất khó khăn, bởi vì IceFaces thích đánh dấu các ID DIV và các phần liên quan khác của cây DOM mà bạn có thể muốn đánh hơi. (Điều này một mình có thể là lý do tại sao rất ít nhà phát triển JSF thử đơn vị kiểm tra đầu ra JSF.)

Sau khi kiểm tra của bạn được xác minh, hãy trao đổi các hạt thông thường và cấu hình lại tệp vào ứng dụng.

Thì đấy! Bạn vừa kiểm tra đơn vị các thành phần JSF của mình.

Tâm trí bạn, toàn bộ công việc trao đổi các hạt cà phê và các tệp cấu hình là lộn xộn. Sẽ dễ dàng hơn nhiều nếu IceFaces sử dụng Spring để so khớp các bean sao lưu với các trang JSF - sau đó bạn có thể chỉ định nghĩa các bean thử nghiệm trong một tệp application.xml với các lớp thử nghiệm có liên quan. Nhưng đó là cuộc sống.

Chúc bạn may mắn và cho tôi biết cách hoạt động của bạn!

1

Đây không phải là chính xác những gì bạn đang yêu cầu nhưng JSFUnit (sử dụng JUnit, Cactus, HtmlUnit và HttpUnit) dường như là một ứng cử viên nghiêm túc để thử nghiệm trên mảnh đất JSF. Bạn đã xem xét tùy chọn này? Có thể có một cái nhìn tại JSFUnit WikiGetting Started Guide của nó. Xin lưu ý rằng Câu hỏi thường gặp đang báo cáo một số vấn đề với IceFaces nhưng khá cũ (đầu năm 2009) và tình hình có thể đã thay đổi kể từ đó (có một số dự án demo như jboss-jsfunit-examples-icefaces hoặc icefaces-demo-address trong kho JBoss để nó có giá trị yêu cầu trạng thái chính xác trên danh sách gửi thư của JSFUnit hoặc IceFaces).

EDIT: Như đã đề cập trong nhận xét, OP đang tìm kiếm thứ gì đó ít "cao cấp". Có lẽ có một cái nhìn tại Shale Test Framework:

Các thử nghiệm Khung Shale cung cấp giả thư viện đối tượng, cộng với lớp cơ sở để tạo JUnit của riêng bạn TestCase s.

đối tượng Mock được cung cấp trong gói org.apache.shale.test.mock cho API container sau đây:

  • JavaServer Faces
  • Servlet

Disclaimer: Apache Shale chuyển vào Attic tháng năm 2009 (tức là nó đã kết thúc cuộc đời) nhưng tôi không biết bất kỳ khuôn khổ giả lập "trưởng thành" nào khác cho JSF vì vậy tôi đề cập đến nó anyway (mã vẫn còn đó). Tôi sẽ theo chủ đề này với sự quan tâm rất cao đối với các giải pháp khác :)

+0

Vâng tôi đã xem xét điều đó. Đáng buồn thay đó là "mức cao" cho nhu cầu của tôi. Tôi muốn kiểm tra từng phần riêng biệt thay vì toàn bộ ngăn xếp, như JSFUnit thực hiện. – Ryan