2009-01-06 29 views
10

Tôi đang xây dựng một ứng dụng truy vấn dịch vụ web. Dữ liệu trong cơ sở dữ liệu khác nhau và thay đổi theo thời gian. Làm thế nào để xây dựng một bài kiểm tra đơn vị cho loại ứng dụng này?Làm cách nào để bạn thực hiện kiểm tra đơn vị khi kết quả thay đổi?

Dịch vụ web gửi lại xml hoặc không có trang html kết quả tìm kiếm nào. Tôi thực sự không thể thay đổi dịch vụ web. Ứng dụng của tôi về cơ bản truy vấn dịch vụ web bằng cách sử dụng HTTPURLConnection và nhận phản hồi dưới dạng Chuỗi.

Hy vọng rằng sẽ giúp chi tiết hơn.

Trả lời

26

Tóm tắt dịch vụ web bằng proxy mà bạn có thể thử. Yêu cầu dịch vụ web giả của bạn trả về các giá trị khác nhau thể hiện dữ liệu bình thường và các trường hợp góc. Ngoài ra mô phỏng nhận ngoại lệ từ dịch vụ web. Đảm bảo mã của bạn hoạt động trong các điều kiện này và bạn có thể chắc chắn rằng nó sẽ hoạt động với bất kỳ giá trị nào của nguồn cung cấp dịch vụ web.

Nhìn vào jMock để mô phỏng Java.

+0

+1: Đối tượng giả loại bỏ mọi nghi ngờ về giao diện. –

+0

Tôi thậm chí không nghĩ đến việc chế nhạo dịch vụ web. Nghe có vẻ như con đường để đi. – kevindaub

3

Có vẻ như thử nghiệm của bạn ở mức quá cao. Xem xét chế nhạo giao diện dịch vụ web và viết các kiểm tra đơn vị khác trên lớp dữ liệu truy cập cơ sở dữ liệu. Một số chi tiết ở đây có thể làm cho câu hỏi này dễ trả lời hơn, ví dụ như tình huống bạn đang cố kiểm tra.

tôi thường mong chờ kết quả của một bài kiểm tra đơn vị không thay đổi, hoặc ít nhất là trong một phạm vi mà bạn đang mong

3

Câu hỏi của bạn là một chút mở kết thúc nhưng có chắc chắn một số tùy chọn kiểm chứng chỉ sử dụng thông tin ở trên:

  1. Bạn có thể kiểm tra xem truy vấn có hoạt động không. Xác nhận rằng bạn sẽ lấy lại một tập kết quả không rỗng/không trống.
  2. Bạn có thể kiểm tra xem kết quả truy vấn có phải là một tập hợp kết quả hợp lệ không. Xác nhận rằng các kết quả sẽ vượt qua mã xác nhận của bạn (do đó, tại thời điểm này, bạn biết rằng dữ liệu là không null, không phải là không nhạy cảm và có thể hữu ích).
  3. Nếu bạn biết bất kỳ điều gì về lược đồ dữ liệu/mô tả dữ liệu, bạn có thể khẳng định rằng các trường là hợp lý trong mối quan hệ với nhau. Ví dụ, nếu bạn nhận được kết quả với một máy bay trực thăng, nó không nên được kết hợp với độ cao 100 mét âm ...
  4. Nếu bạn biết bất kỳ điều gì về phân phối xác suất dữ liệu, bạn sẽ có thể thu thập một tập hợp dữ liệu và khẳng định rằng phân phối kết quả của bạn nằm trong độ lệch chuẩn của những gì bạn muốn thấy.

Tôi chắc chắn rằng với một số thông tin khác, bạn sẽ nhận được một đống đề xuất hữu ích.

6

Nói đúng về thử nghiệm đơn vị, bạn chỉ có thể kiểm tra các đơn vị có hành vi xác định .

Kiểm tra kết nối với máy chủ web bên ngoài là kiểm tra tích hợp .

Giải pháp là giả lập HTTPURLConnection - tức là tạo một lớp trong các bài kiểm tra đơn vị của bạn xuất phát từ lớp HTTPURLConnection và trả về một giá trị hardcoded hoặc một tham số có thể tham số. EDIT: thông báo điều này có thể được thực hiện maunally, mà không có bất kỳ khuôn khổ mocking.

Lớp truy vấn máy chủ web không được phép thực hiện HTTPURLConnection, nhưng nhận nó thông qua tham số. Trong các bài kiểm tra đơn vị, bạn tạo HTTPURLConnectionMock và chuyển nó tới lớp thẩm vấn máy chủ web sẽ sử dụng nó vì nó đang sử dụng một HTTPURLConnection thực. Trong mã sản xuất, bạn tạo một HTTPURLConnection thực và chuyển nó tới lớp.

Bạn cũng có thể làm cho HTTPURLConnectionMock của bạn có thể ném một IOException, đến điều kiện lỗi kiểm tra. Chỉ cần có một phương thức để yêu cầu nó không trả về kết quả mà là một ngoại lệ theo yêu cầu tiếp theo.

+0

Cảm ơn bạn đã trả lời kỹ lưỡng hơn. – kevindaub

1

Sự cố mà tôi gặp phải là với các mô hình dữ liệu phức tạp (có nghĩa là "crappy"), nơi bạn không bao giờ có thể chắc chắn rằng các sự cố là do lỗi mã hoặc lỗi dữ liệu.

Một triệu chứng của điều này là khi ứng dụng của bạn hoạt động tuyệt vời, vượt qua tất cả các thử nghiệm, v.v ... với dữ liệu giả hoặc tập dữ liệu mới, nhưng phá vỡ khủng khiếp khi bạn chạy ứng dụng của mình trên dữ liệu thực.

+0

Rất đúng. Tôi đoán đó là lý do tại sao bạn cần nhiều hơn 1 loại xác minh: kiểm tra đơn vị và thử nghiệm tích hợp. – kevindaub

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