2013-07-09 26 views
5

Tôi đang viết mô-đun perl giao tiếp với API và tôi muốn viết một bộ thử nghiệm cho nó trước khi đặt nó lên trên CPAN. Tuy nhiên, vì mô-đun này về cơ bản chỉ là một giao diện cho một API, tất cả các kiểm tra sẽ yêu cầu một khóa API và người dùng hợp lệ. Rõ ràng tôi không thể phát hành mô-đun này với khóa API và tên người dùng của tôi trong bộ thử nghiệm, vậy cách tốt nhất để xử lý một cái gì đó như thế này là gì? Tôi có nên thử nghiệm tại địa phương và sau đó đặt nó lên CPAN không có kiểm tra? Có ai chạy vào điều này trước và đưa ra một giải pháp tốt? Tôi biết rằng các bài kiểm tra viết là thực hành tốt nhất, vì vậy tôi muốn làm điều đó nếu tôi có thể. Cảm ơn!bộ kiểm tra perl cho API

+0

Bạn có thể viết và triển khai api giả không cần khóa hoặc khóa giả để kiểm tra cơ chế khóa. Điều này có thể được hoán đổi với api thực thông qua một biến môi trường cho những người có thật. – KeepCalmAndCarryOn

+0

@KeepCalmAndCarryOn - xem câu trả lời của tôi :) – DVK

Trả lời

4

Tại sao không gói các cuộc gọi API thành các chức năng nhỏ (ví dụ chức năng NOTHING nhưng cuộc gọi API), và sau đó thử các chức năng đó trong các thử nghiệm của bạn khi cần sử dụng Test::MockObject hoặc tương tự?

này sẽ tốt hơn, vì bạn sẽ có thể làm xét nghiệm kiểm tra mà kết quả khác nhau từ API (thất bại, auth thất bại, vv ...)

+1

Lưu ý: đây chắc chắn là một giải pháp nhiều thích hợp hơn để "bỏ qua các bài kiểm tra", nhưng kém hơn "thử nghiệm các bài kiểm tra đơn vị 100% mã không gọi API + cho phép người dùng cung cấp khóa và người dùng riêng cho các trường hợp kiểm tra tích hợp" – DVK

+0

Câu trả lời này cũng tốt. Bạn sẽ nhận được để kiểm tra các bit thực hiện các giá trị trả về API. –

3

Tôi đã làm rõ trong tài liệu của tôi rằng mô-đun của tôi vô dụng mà không có khóa API và sử dụng bỏ qua: {} các cấu trúc thử nghiệm :: Thêm để bỏ qua tất cả các bài kiểm tra nếu khóa không có. Bạn có thể chọn quá bail_out thay vì bỏ qua.

Chỉ cần đảm bảo rằng tài liệu của bạn giải thích cách liên lạc khóa API với mô-đun.

+0

bạn có thể cho tôi biết tên của mô-đun của bạn để tôi có thể xem nó như một ví dụ? – srchulo

+0

có. cho tôi một phút để tìm nó. Tôi đã không làm việc trên nó trong hơn 2 năm :-) –

+0

https://metacpan.org/release/VendorAPI-2Checkout-Client –

2

Cách thông thường tôi xử lý các loại điều này là để yêu cầu một biến môi trường để chạy bộ kiểm thử. Biến môi trường sẽ chứa bit thông tin hữu ích (ví dụ: khóa API, tên máy chủ để kết nối, v.v.)

Dưới đây là ví dụ về cách bạn có thể xử lý loại điều này từ bên trong tệp thử nghiệm. Chúng tôi sử dụng này cho việc phân phối MongoDB để kiểm tra nếu có một máy chủ có sẵn để chạy chống lại:

BEGIN { 
    eval { 
     my $host = exists $ENV{MONGOD} ? $ENV{MONGOD} : 'localhost'; 
     $conn = MongoDB::MongoClient->new(host => $host, ssl => $ENV{MONGO_SSL}); 
    }; 

    if ([email protected]) { 
     plan skip_all => [email protected]; 
     exit 0; 
    } 
}; 

Tất cả điều này là cố gắng kết nối đến một máy chủ được quy định trong biến MONGOD môi trường (hoặc khác localhost). Nếu nó có thể Không, nó bỏ qua tất cả các bài kiểm tra và cho biết lý do tại sao. Các bỏ qua vẫn được tính là không thành công, vì vậy nó sẽ không ngăn cản việc cài đặt mô-đun nếu không có máy chủ thử nghiệm nào.

Tôi có mã này trong tệp .pm mà tôi use trong mọi tệp .t trong bản phân phối.

+0

đây cũng là một câu trả lời hay. –

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