Khi có sự chồng chéo đáng kể trong quá trình thiết lập thử nghiệm, nó có thể giữ mọi thứ KHẢ NĂNG sử dụng kế thừa. Nhưng điều này gây ra các vấn đề với sự trùng lặp không cần thiết thực hiện kiểm tra:Tại sao các bài kiểm tra trong các lớp dẫn xuất chạy lại các bài kiểm tra lớp cha mẹ?
from unittest import TestCase
class TestPotato(TestCase):
def test_in_parent(self):
print 'in parent'
class TestSpud(TestPotato):
def test_in_child(self):
print 'in child'
kiểm tra module này chạy test_in_parent
hai lần.
$ python -m unittest example
in parent
.in child
.in parent
.
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
Tại sao? Đây có phải là do thiết kế không? Nó có thể được vô hiệu hóa bằng cách cấu hình các Á hậu thử nghiệm một cách nhất định?
Tôi có thể khắc phục sự cố bằng cách di chuyển thiết lập vào lớp không được khám phá và sau đó sử dụng nhiều tính kế thừa, nhưng có vẻ như hơi bị hack và không cần thiết.
lưu ý: Cùng một vấn đề xảy ra ở vận động viên khác như mũi (nosetests -s example.py
) và pytest (py.test example.py
)
Bởi vì họ kế thừa phương pháp thử nghiệm của cha mẹ, vì vậy khi 'unittest' trông qua' dir' của họ (hoặc '__dict__' hoặc bất cứ điều gì nó) cho các phương thức bắt đầu 'test_' nó cũng tìm ra các phương thức kế thừa. Tôi không nghĩ rằng việc giải quyết điều này đòi hỏi sự thừa kế * nhiều *; trừu tượng những gì cả hai cần đến một lớp thứ ba, không thể khám phá mà không có phương thức 'test_' và có cả hai đều thừa hưởng nó. – jonrsharpe
Nhìn vào một lớp con có một lớp cha có chứa các phương thức được đặt trước bằng kiểm tra sẽ hiển thị lớp con với các phương thức đó. Đây là OOP trăn. Tôi không nghĩ rằng việc chuyển các phương thức thiết lập thành mixin hay là một lớp cơ sở riêng biệt có vẻ như là hacky và có lẽ là DRYer – dm03514
Dường như một trường hợp sử dụng tuyệt vời cho các mixin cho các nhóm khác nhau. ..tree-inheritance không giống như mô hình phù hợp ở đây. – Shashank