Một số chống khuyến nghị có thể theo thứ tự:
Anti-giới thiệu:
ĐỪNG sử dụng gia đình Test::Unit
các gói thử nghiệm cho Perl như Test::Unit::Assert
và Test::Unit::TestCases
.
Lý do: Test::Unit
dường như bị bỏ qua.
Test :: Unit, Test :: Unit :: TestCases, Test :: Unit :: Assert work, khá tốt (khi tôi sử dụng chúng 2015-2016). Test :: Unit được cho là không được tích hợp với Perl's Test Anything Protocol (TAP), mặc dù tôi thấy dễ sửa lỗi.
Nhưng thử nghiệm :: Đơn vị là bực bội vì rất nhiều gói thử nghiệm Perl khác, chủ yếu được xây dựng bằng cách sử dụng Test :: Builder, như Test :: More, Test :: Most, Test :: Exception, Test :: Differences, Test :: Deep, Test :: Warn, vv, KHÔNG tương tác tốt với phương pháp thử nghiệm hướng đối tượng của Test :: Unit.
Bạn có thể kết hợp kiểm tra :: Kiểm tra đơn vị và kiểm tra :: Trình kiểm tra trình xây dựng khi bạn đã điều chỉnh thử nghiệm :: Đơn vị để làm việc với thử nghiệm :: Thêm và TAP; nhưng các tính năng tốt của các gói khác này không có sẵn cho phần mở rộng OO. Đó là nhiều lý do để sử dụng một bài kiểm tra kiểu xUnit anyway.
Giả sử CPAN Test::Class
cho phép "Dễ dàng tạo các lớp thử nghiệm theo kiểu xUnit/JUnit" - nhưng tôi không chắc chắn rằng tôi có thể đề xuất điều này. Nó chắc chắn không giống như xUnit với tôi - không phải OO, tên riêng biệt như is(VAL1,VAL2,TESTNAME)
thay vì tên kiểu xUnit như $test_object->assert_equals(VAL1,VAL2,TEST_ERR_MSG)
. Bài kiểm tra :: Lớp học có tính năng thú vị của tự động phát hiện tất cả các bài kiểm tra được chú thích: Kiểm tra, so sánh với phương pháp xUnit và TEST :: Unit :: TestCase bằng cách sử dụng nội suy để chạy tất cả các hàm có tên test_ *.
Tuy nhiên, gói cơ bản Test::Builder
là hướng đối tượng và do đó nhiều kiểu xUnit hơn. Đừng sợ hãi bởi tên - nó không phải là một nhà máy, nó chủ yếu là một bộ với phương pháp xác nhận thử nghiệm. Mặc dù hầu hết mọi người thừa kế từ nó, bạn có thể gọi trực tiếp nếu bạn muốn, ví dụ: $test_object->is(VAL1,VAL2,TESTNAME)
và thường bạn có thể sử dụng các cuộc gọi Test :: Builder để làm việc xung quanh các giới hạn của các gói thủ tục như Test :: More được xây dựng trên đầu trang của Test :: Builder - như sửa chữa mức callstack mà tại đó một lỗi được báo cáo.
Kiểm tra :: Trình tạo thường được sử dụng kiểu đơn, nhưng bạn có thể tạo nhiều đối tượng. Tôi không chắc chắn liệu những hành vi này có phải là điều mong đợi từ một thử nghiệm gia đình xUnit hay không.
Cho đến nay, không có cách nào dễ dàng để giải quyết các giới hạn như kiểm tra TAP Perl sử dụng TEST_NAMES, mỗi xác nhận, không có phân cấp và không phân biệt TEST_NAMES với TEST_ERROR_MESSAGES. (Mức báo cáo Err giúp với sự thiếu đó.)
Có thể tạo một bộ điều hợp làm cho Test :: Builder và kiểm tra kiểu TAP hướng đối tượng hơn, để bạn có thể rebase trên một thứ khác ngoài TAP (ghi lại nhiều hơn thông tin hữu ích hơn TAP - được cho là giao thức XML của ANT). Tôi nghĩ rằng để thích ứng với các tên và/hoặc các khái niệm còn thiếu sẽ liên quan đến việc đi vào Test :: Builder, hoặc introspection.
chỉ cần tự hỏi, 'tests => 3' là gì. tôi có cần phải mã hóa số lượng các trường hợp không? – Mike
Bạn không cần phải làm như vậy. Nhưng nếu kịch bản thử nghiệm của bạn chết sau khi xuất kết quả cho chỉ 1 hoặc 2 thử nghiệm, Kiểm tra :: Biết thêm rằng thử nghiệm của bạn đã thất bại (ngay cả khi nó thoát với một mã lỗi của số không). Bạn cũng có thể thực hiện 'use Test :: More 'no_plan'' hoặc gọi' done_testing() 'ở cuối script. – rjh
Tôi không thể tìm được cách thích hợp để sử dụng không có kế hoạch. Nếu tôi không chỉ định một đối số số cho 'done_testing', tôi nhận được' Bạn đã cố chạy thử nghiệm mà không có kế hoạch! Phải có một kế hoạch ' – Mike