2009-01-04 36 views
17

Cách tốt nhất để kiểm tra mã GWT là gì?Cách tốt nhất để kiểm tra mã GWT

GWTTestCase ở chế độ được lưu trữ quá chậm và không có khung công tác nhạo báng nào hoạt động.

Hiện tại chúng tôi đang theo dõi MVC như được đề xuất trong http://robvanmaris.jteam.nl/2008/03/09/test-driven-development-for-gwt-ui-code/ và sử dụng GWTMockUtilities giải giáp vũ khí() và khôi phục() để mô phỏng tiện ích con. Và chúng tôi đã tìm ra cách để kiểm tra Chế độ xem trong GWT MVC. Có cách nào tốt hơn để kiểm tra mã GWT không?

Trả lời

14

Nếu bạn đang tìm cách thử nghiệm các tiện ích GWT riêng biệt, không có nhiều tùy chọn. Bạn có thể sử dụng GWTTestCase để khởi tạo các tiện ích của mình và kiểm tra nó thông qua API của nó, đó là những gì Google thực hiện cho các tiện ích GWT: Source for RadioButtonTest

Tuy nhiên, cơ chế kích hoạt sự kiện không hoạt động trong GWTTestCases, có nghĩa là bạn có thể không làm những việc như bấm một nút lập trình và mong đợi một số phương thức gọi lại onClick() được gọi trên một người nghe. Nó cũng là khó nếu không phải là không thể có được ở DOM cơ bản, vì vậy nó có thể không phải là công cụ tốt nhất để thử nghiệm mã phát ra HTML ở mức độ thấp.

Có vẻ như bạn đang theo dõi tất cả các bước phù hợp; Bài viết của Rob cung cấp một mô tả tuyệt vời về cách viết mã có thể kiểm tra bằng cách sử dụng mẫu thiết kế Model-View-Presenter (MVP). Bạn càng giữ được nhiều lớp logic hơn, thì càng tốt. Khi điều đó là không thể, hãy sử dụng một công cụ như Selenium để tạo các bài kiểm tra tập trung của hành vi UI động.

Tôi đã theo một chiến lược tương tự - MVP với mã tối thiểu trong các tiện ích. Trong một vài trường hợp, tôi đã viết một số mã sẽ bao bọc lớp Grid, vì vậy tôi có thể khởi tạo thành phần của mình trong GWTTestCase, chuyển nó một Grid, gọi một số phương thức trên thành phần của tôi và kiểm tra trạng thái của Grid. Tôi đã viết một bài viết cho phần mềm tốt hơn về GWT thử nghiệm đầu tiên, mà bạn có thể đọc on my blog. Nếu bạn đang tìm cách kiểm tra mã sử dụng các lớp GWT không phải UI (như mã hóa URL hoặc Từ điển), bạn sẽ cần sử dụng GWTTestCase hoặc làm theo các chiến lược gói tương tự cho đến khi mã quá đơn giản để phá vỡ . Sau đó, sử dụng một bài kiểm tra tích hợp với một công cụ như Selenium, hoặc một vài GWTTestCases nhắm mục tiêu mà chỉ kiểm tra rằng bạn đang sử dụng thư viện chính xác - như J.B. Rainsberger nói, "Đừng kiểm tra khung!"

4

gì làm việc cho tôi:

Sử dụng cổ điển mô hình/xem/điều khiển (ví dụ không có logic kinh doanh trong giao diện hoặc bộ điều khiển; bộ điều khiển chỉ dịch xem các sự kiện vào phương pháp gọi trên mô hình).

Decouple mã mô hình và bộ điều khiển từ tiện ích chế độ xem GWT và bất kỳ lớp nào khác dựa trên GWT và không thể được khởi tạo trong một JVM cũ đơn giản. Sau đó bạn có thể kiểm tra chúng với JUnit cũ tốt.

Viết các bài kiểm tra đầu cuối để kiểm tra hệ thống thông qua GUI để đảm bảo rằng các mô hình và bộ điều khiển được kết nối chính xác với các chế độ xem. Chúng tôi thấy nó nhanh hơn để triển khai và khởi động ứng dụng và sau đó tương tác với nó thông qua trình duyệt được điều khiển từ JUnit với WebDriver hơn là sử dụng GWTTestCase!

Sử dụng JMock để kiểm tra các cuộc gọi không đồng bộ như sau: http://www.jmock.org/gwt.html.

+0

Chỉ cần 2 xu của tôi về báo trước cần thiết để chạy một số thử nghiệm GWT JUnit đã sử dụng JMock trong Eclipse: Tôi cần thêm gwt-dev.jar vào đường dẫn lớp của một số lớp thử JUnit cụ thể sử dụng JMock; trước khi làm như vậy, các lớp như vậy có lỗi này: java.lang.NoClassDefFoundError: com/google/gwt/core/shared/GWTBridge – cellepo

8

Là một alernative, bạn nên cố gắng gwt-test-utils, mà quản lý để chạy mã khách hàng GWT trong một JVM độc lập và cung cấp một số tính năng để Mock bất cứ điều gì bạn muốn (thành phần, dịch vụ RPC, vv ..)

+0

Đã thử sử dụng gwt-test-utils. Nhưng nó đưa ra: java.lang.RuntimeException: Lỗi khi tải lớp con JavaScriptObject và các trường hợp Patcher .. bất kỳ ý tưởng nào – MountainRock

Các vấn đề liên quan