Tôi hiện đủ ngu ngốc để cố gắng duy trì hai căn cứ mã song song cho ứng dụng máy tính để bàn Python, sử dụng PyGObject introspection cho GTK 3 và một sử dụng PyGTK cho GTK 2. Tôi làm việc chủ yếu trên nhánh PyGObject và sau đó tôi thay đổi cổng đến chi nhánh PyGTK. Do tất cả các khác biệt nhỏ giữa các triển khai này, tôi thường bỏ qua mọi thứ và gây ra sự cố mà tôi bỏ lỡ và vô tình phát hành, chỉ để bị người dùng bắt.Cách được khuyến nghị để bỏ qua các ứng dụng GUI của Python là gì?
Tôi đang cố gắng tìm ra cách tốt để thiết kế một số unittests, tốt nhất là phù hợp để chạy trên cả hai cơ sở mã. Nó không phải là một chương trình quá phức tạp, (đó là về cơ bản là một công cụ quản lý thư viện, hãy tưởng tượng như iTunes):
- Main Window
|- Toolbar with some buttons (add/edit/remove items, configure the program)
|
|- VPaned
|--- Top HPaned
|------ ListView (listing values by which a library of items can be filtered)
|------ ListView (listing the contents of the library
|--- Bottom HPaned
|------ Image (displaying cover art for the currently selected item in the library)
|------ TextView (displaying formatted text describing the currently selected item)
- Edit dialog
- Configuration dialog
- About dialog
Tôi đã cố gắng để xem từ các mô hình tách càng nhiều càng tốt. Mỗi mục trong số đó được thực hiện trong lớp riêng của nó (tốt, trong các lớp kế thừa từ các lớp GTK được liệt kê). ListViews được kết hợp với các lớp khác kế thừa từ ListStores. Bản thân thư viện được xử lý bởi một lớp khác. Tuy nhiên, có những tương tác giữa các vật dụng cần được kiểm tra. Ví dụ: nếu người dùng chọn một mục cụ thể trong chế độ xem bộ lọc, lọc thư viện và sau đó chọn một mục từ kết quả được lọc, thì chế độ xem văn bản phải hiển thị thông tin cho mục nhập thư viện chính xác. iters giữa TreeModelFilter và ListStore gốc, v.v.
Vì vậy, tôi hỏi, cách được khuyến nghị để viết thử nghiệm đơn vị mạnh mẽ cho ứng dụng GUI như thế nào? Tôi đã thấy rằng có một số thư viện cho điều này, nhưng những người chính cho pygtk đã không được cập nhật trong nhiều năm và do đó họ gần như chắc chắn sẽ thất bại với PyGObject introspection. Có lẽ tôi không đủ sáng tạo để tìm ra cách tốt để làm điều đó bằng cách sử dụng mô-đun unittest
của Python, vì vậy tôi mở để đề xuất.
Và trước khi có ai hỏi: pygtk không hỗ trợ GTK 3, nhưng tôi thấy rằng sự hỗ trợ cho sự mâu thuẫn pygobject của GTK 2 là quá không đầy đủ để phụ thuộc vào. –
Đối với tôi, cách tốt nhất để tránh hồi quy khi sử dụng GUI là thực hiện các kiểm tra thủ công. Unittest thực sự tốt để thử nghiệm các chức năng làm việc (ví dụ như MVC) nhưng tôi không biết làm thế nào bạn có thể đối phó với gui ... – ykatchou
Đây là những gì tôi đã làm nhưng tôi dường như không giỏi lắm, vì mọi bản phát hành tôi đều nhớ một vài thứ. –