2011-11-02 24 views
7

Chúng tôi đã viết các trình phân tích cú pháp cho các định dạng dữ liệu khoa học khác nhau trong Perl. Gần đây tôi đã thêm một bộ thử nghiệm với một tệp parser_*.t cho mọi định dạng và biểu mẫu con.Làm thế nào để lên kế hoạch kiểm tra bổ sung được chạy bởi phụ bên ngoài?

Tất nhiên, API của các trình phân tích cú pháp hoàn toàn giống với dữ liệu được đọc từ các tệp mẫu được sử dụng để kiểm tra phân tích cú pháp khác. Để đơn giản hóa các tệp thử nghiệm, tôi đã viết một phụ được truyền đối tượng phân tích cú pháp và một cấu trúc băm đại diện cho dữ liệu dự kiến. Dường như

my $parser = new MyApp::Parser($file); 
test_nested_objects = ($parser, { 
    property1 => "value", 
    property2 => 123, 
    subobject_accessor => { 
     property3 => "foobar", 
    } 
} 

Tiểu test_nested_objects đi qua băm và chạy thử nghiệm cho tất cả các thuộc tính được định nghĩa trong băm, ví dụ nếu subobject_accessor có thể được gọi, trả về một đối tượng và đối tượng đó có thể được gọi là property3.

Tôi đã kiểm tra xem có bao nhiêu thử nghiệm được chạy bởi toàn bộ tệp *.t và thêm tests => 123 vào tất cả các tệp *.t. Bây giờ, tôi đã thêm một số kiểm tra vào chức năng chung và tất cả các kế hoạch đều sai.

Làm cách nào để kế hoạch của tôi nhận biết được các bài kiểm tra? Tôi muốn đạt được như sau:

  • số xét nghiệm đưa ra trước khi chạy chúng cho quan điểm của progess
  • tổng số tăng tự động → không thay đổi số bằng tay khi chỉnh sửa phụ
  • kiểm tra cá nhân trong phụ có thể nhìn thấy khi chạy chứng minh (ẩn kiểm tra ở phụ và trả về 0 hoặc 1 không được chấp nhận vì tôi thực sự cần biết dữ liệu được phân tích là gì)

Tôi hy vọng bạn có thể hiểu. Xin lỗi vì câu chuyện dài nhưng tôi nghĩ mọi người có lẽ sẽ không hiểu mà không có kiến ​​thức nền tảng.

Trả lời

10

Xu hướng mới nhất trong quy hoạch thử nghiệm đơn giản là không thực hiện. Ở cuối tệp thử nghiệm của bạn, bạn tuyên bố rằng bạn đã đạt đến kết thúc:

done_testing(); 

Nhiều công dụng của kế hoạch kiểm tra chỉ tồn tại để đảm bảo rằng tập lệnh thử nghiệm đã hoàn tất. Nếu nó nhìn thấy đúng số lượng các bài kiểm tra, kịch bản phải đã làm cho nó tất cả các cách để kết thúc. Điều đó không thực sự đúng, nhưng đó là một tiểu thuyết tiện lợi và khả thi.

Nếu bạn phải làm một số tính toán để xác định số lượng các bài kiểm tra, chẳng hạn như đo kích thước của một cấu trúc dữ liệu, làm điều đó sau đó gọi plan sau:

use Test::More; # don't declare the plan yet 

my $test_count = ...; 

plan tests => $test_count; 

Thay vì lập kế hoạch lớn, tuy nhiên, bạn có thể chia các bài kiểm tra của mình thành các bài kiểm tra. Mỗi thi này chỉ có biết có bao nhiêu bài kiểm tra nó chạy, và kịch bản chỉ có biết số lượng các phép thử phụ:

subtest some_label => sub { 
     plan tests => $n; 
     ... 
     }; 

mỗi cuộc gọi của bạn đến một chức năng kiểm tra sẽ là một thử nghiệm, và các chức năng sẽ sử dụng một để làm bất cứ điều gì nó muốn làm mà không phơi bày quá nhiều cho người gọi của nó.

0

Nếu số lượng bài kiểm tra phụ trên mỗi định dạng được biết, bạn có thể thực hiện các phép tính thử nghiệm trong khối BEGIN trước khi sử dụng Kiểm tra :: Thêm.

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