2010-07-21 40 views
31

Tôi đã thư mục, trong đó chứa tập tin có tên như: test_foo.pyPython unittest và khám phá

Mỗi tập là một trường hợp thử nghiệm.

Tôi muốn

1) Chạy tất cả các kiểm tra trong thư mục từ dòng lệnh. Tôi đang sử dụng unittest2, vì chúng tôi đang chạy Python 2.5.1. Từ một trong các thư mục này, tôi đã thử nhập mã này tại dòng lệnh:

python -m unittest2 discover -p 'test_*.py' 

và một vài biến thể khác nhau. Tôi không nhận được lỗi, nhưng không có gì xảy ra. Tôi đã mong đợi tất cả các bài kiểm tra trong tất cả các trường hợp thử nghiệm trong thư mục đó để chạy và nhận kết quả.

2) Tôi cũng đã cố gắng có một kịch bản trong thư mục nơi mà tôi đã làm điều này:

loader = unittest2.TestLoader() 
t = loader.discover('.') 

Nếu tôi in biến t, tôi có thể thấy trường hợp thử nghiệm của tôi, nhưng từ các tài liệu tôi không thể hình phải làm gì với đối tượng bộ nạp khi tôi có nó.

Trả lời

23

Give làm thế nào bạn đang cố gắng sử dụng unittest2 từ dòng lệnh trên Python < 2.7, tôi nghĩ bạn có thể đã bỏ lỡ the note on the unittest2 PyPI page:

Note

sử dụng dòng lệnh

Trong Python 2.7 bạn gọi các tính năng dòng lệnh không hợp lệ (bao gồm kiểm tra khám phá) với python -m unittest <args>. Là gói không nhất thiết và khả năng gọi các gói với python -m ... là mới trong Python 2.7, chúng tôi không thể thực hiện việc này cho unittest2.

Thay vào đó unittest2 đi kèm với tập lệnh đơn vị2. Dòng lệnh sử dụng:

unit2 discover unit2 -v test_module 

Ngoài ra còn có một bản sao của kịch bản này gọi unit2.py, hữu ích cho Windows trong đó sử dụng tập tin mở rộng hơn là dòng công việc để xác định những gì chương trình để chạy các file với. Cả hai các tập lệnh này đều được cài đặt bởi các dấu rãnh.

Bạn đã thử kịch bản unit2 mà lưu ý này đề xuất thay thế cho Pythons cũ hơn đối với tính năng "chạy gói dưới dạng tập lệnh chính" của Python 2.7? Có thể các nguồn của nó cũng có thể hữu ích để tìm hiểu chính xác cách kiểm tra và chạy thử nghiệm từ mã của riêng bạn, nếu đó là những gì bạn muốn làm.

+0

Cảm ơn Alex! Tôi đã bỏ lỡ ghi chú đó. Và bây giờ nó hoạt động. Bạn đã sử dụng mũi chưa? Để bạn đề nghị đó? Sách tuyệt vời btw, cảm ơn bạn đã viết chúng. – Aaron

+0

@Aaron, bạn được chào đón! Có, tôi đã sử dụng mũi một cách hạnh phúc trong quá khứ (tôi vẫn chưa biết liệu tôi sẽ _replace_ hoặc _supplement_ nó có chức năng mới nhất không - tôi không phải là tất cả những gì quen thuộc với cái thứ hai!). –

42

Tôi đã gặp sự cố tương tự khi chạy python -m unittest discover. Dưới đây là danh sách kiểm tra tốt để xác minh thiết lập của bạn. Nose linh hoạt hơn với cấu hình được phép, nhưng không nhất thiết phải tốt hơn.

  1. Đảm bảo tất cả các tệp/dir bắt đầu bằng test.Làm không sử dụng test-something.py, vì đó không phải là tên mô-đun python hợp lệ. Sử dụng test_something.py.

  2. Nếu bạn đang thử nghiệm trong một thư mục con (ví dụ: test/), hãy đảm bảo bạn tạo tệp test/__init__.py để python sẽ coi thư mục là gói.

  3. Tất cả các định nghĩa của trường hợp kiểm tra lớp phải được mở rộng unittest.TestCase. Ví dụ

    class DataFormatTests(unittest.TestCase) 
    
+0

Có cách nào để thêm tập lệnh khởi động với khám phá không nhất thiết không? – 010110110101

+0

Ngoài ra các tên phương thức, ví dụ 'test_does_something (self):' –

+1

Đối với tôi, tạo 'tests/__ init __. Py' giải quyết vấn đề. – gzc

47

Khi bạn đã phát hiện bài kiểm tra, bạn có thể chạy chúng với một Á hậu kiểm tra.

import unittest2 
loader = unittest2.TestLoader() 
tests = loader.discover('.') 
testRunner = unittest2.runner.TextTestRunner() 
testRunner.run(tests) 

Chạy mã trên sẽ in kết quả kiểm tra ra tiêu chuẩn.

+10

Đây là một trong những tôi đang tìm kiếm, và câu trả lời trực tiếp nhất cho câu hỏi ban đầu. Nó trông hơi khác nhau trong 2,7 mặc dù; 'test_loader = unittest.defaultTestLoader.discover ('.')'; sau đó 'test_runner = unittest.TextTestRunner()'; sau đó 'test_runner.run (test_loader)' và bạn tốt. – Paul

+3

Đây là phương pháp được khuyến nghị nếu bạn cần phải gọi chương trình thử nghiệm một cách có lập trình, giả sử từ một tập lệnh tùy chỉnh hoặc cá thể 'Lệnh'. –

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