2013-04-15 26 views
5

Tôi đã tạo nhóm thử nghiệm Python bằng cách sử dụng định dạng Python unittest.Làm cách nào để sắp xếp các thử nghiệm khám phá không ngờ nhất?

Bây giờ tôi có thể chạy chúng với

python -m unittest discover -s TestDirectory -p '*.py' -v 

tôi thấy tất cả, và chạy chúng.

Bây giờ có một sự khác biệt tinh tế cho dù tôi chạy thử nghiệm trên Windows hay trên Linux. Thật vậy, trên Windows các bài kiểm tra được chạy theo thứ tự bảng chữ cái, trong khi trên Linux các bài kiểm tra được chạy trong không có thứ tự rõ ràng của con người có thể phát hiện cụ thể, ngay cả khi luôn luôn giống nhau.

Sự cố là tôi dựa vào hai chữ cái đầu tiên của tệp thử nghiệm để sắp xếp thứ tự thực hiện các thử nghiệm. Không phải là chúng phải được chạy theo một thứ tự cụ thể, nhưng để có một số loại thử nghiệm thông tin, hiển thị dữ liệu phiên bản trong đầu ra của chúng xuất hiện đầu tiên trong nhật ký chạy thử nghiệm.

Có điều gì tôi có thể làm để chạy thử nghiệm cũng theo thứ tự bảng chữ cái trên Linux không?

+0

bạn có thử nosetests không? tôi tự hỏi chạy nosetests trực tiếp sẽ làm cho một sự khác biệt. Tôi không sử dụng khám phá từ unittest vì nosetests có thể làm điều đó khá tốt. bạn đã thử nó chưa – CppLearner

+0

Chỉ cần thử. Có vẻ như các bài kiểm tra được sắp xếp trên Linux. Cảm ơn. Nhưng tôi muốn tránh buộc các nhà phát triển phải cài đặt mũi, và chỉ cần sử dụng python đơn giản với tích hợp 'unittest'. –

+0

Khi tôi chạy điều này cho các bài kiểm tra đơn vị của tôi dưới Linux, nó sắp xếp chúng theo thứ tự sau: đầu tiên theo tên tệp hoặc thư mục, được sắp xếp theo tên lớp, được đặt dưới tên thử nghiệm (phương thức). Vấn đề là, khi chạy các phép thử, tên * * được hiển thị trước tiên, chỉ là phần tử con cuối cùng, và không xuất hiện với bất kỳ thứ tự logic nào. Tôi chỉ muốn kiểm tra rằng không rõ ràng của bạn đặt hàng thực sự là trên tập tin/thư mục - lớp - phương pháp đặt hàng? – Evert

Trả lời

0

Tôi chưa thử điều này, nhưng tôi cho rằng một điều bạn có thể làm là ghi đè lớp TestSuite để thêm chức năng sắp xếp. Sau đó, bạn có thể gọi hàm sắp xếp trước khi gọi hàm unittest run. Vì vậy, trong tập lệnh 'AllTests.py', bạn có thể thêm một cái gì đó như thế này:

class SortableSuite(unittest.TestSuite): 
    def sort(self): 
     self._tests.sort(cmp=lambda x,y: x._testMethodName < y._testMethodName) 
    def run(self,testResult): 
     #or if you don't want to run a sort() function, you can override the run 
     #function to automatically sort. 
     self._tests.sort(cmp=lambda x,y: x._testMethodName < y._testMethodName) 
     return unittest.TestSuite.run(self,testResult) 

loader = unittest.TestLoader() 
loader.suiteClass = SortableSuite 
suite = loader.loadTestFromTestCases(collectedTests) 
suite.sort() 
suite.run(defaultTestResult()) 
Các vấn đề liên quan