Bạn chỉ có thể bắt đầu các lớp học, phương pháp hoặc chức năng tên với dấu gạch dưới và mũi sẽ bỏ qua nó.
@nottest
có cách sử dụng nhưng tôi thấy rằng nó không hoạt động tốt khi các lớp bắt nguồn từ nhau và một số lớp cơ sở phải được bỏ qua bằng mũi. Điều này xảy ra thường xuyên khi tôi có một loạt các lượt xem Django tương tự để kiểm tra. Họ thường chia sẻ các đặc điểm cần thử nghiệm. Ví dụ: chúng chỉ có thể truy cập được đối với người dùng có quyền nhất định. Thay vì viết kiểm tra quyền tương tự cho tất cả chúng, tôi đã đặt thử nghiệm chia sẻ như vậy trong một lớp học ban đầu mà từ đó các lớp khác lấy được. Vấn đề mặc dù là lớp cơ sở chỉ có được bắt nguồn từ các lớp sau và không có nghĩa là để chạy trên riêng của nó. Dưới đây là một ví dụ về vấn đề này:
from unittest import TestCase
class Base(TestCase):
def test_something(self):
print "Testing something in " + self.__class__.__name__
class Derived(Base):
def test_something_else(self):
print "Testing something else in " + self.__class__.__name__
Và đầu ra từ chảy nước mũi vào nó:
$ nosetests test.py -s
Testing something in Base
.Testing something in Derived
.Testing something else in Derived
.
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
Lớp Base
được bao gồm trong các bài kiểm tra.
Tôi không thể chỉ tát @nottest
trên Base
vì nó sẽ đánh dấu toàn bộ phân cấp. Thật vậy, nếu bạn chỉ cần thêm @nottest
vào mã ở trên trước class Base
thì mũi sẽ không chạy bất kỳ thử nghiệm nào.
Những gì tôi làm là thêm một dấu gạch dưới ở phía trước của lớp cơ sở:
from unittest import TestCase
class _Base(TestCase):
def test_something(self):
print "Testing something in " + self.__class__.__name__
class Derived(_Base):
def test_something_else(self):
print "Testing something else in " + self.__class__.__name__
Và khi chạy nó _Base
bị bỏ qua:
$ nosetests test3.py -s
Testing something in Derived
.Testing something else in Derived
.
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Hành vi này cũng không phải là tài liệu nhưng mã mà chọn các bài kiểm tra explicitly checks for an underscore at the start of class names.
Một thử nghiệm tương tự được thực hiện bằng mũi tên hàm và phương thức để có thể loại trừ chúng bằng cách thêm dấu gạch dưới ở đầu tên.
Những nhược điểm này đang trở nên ngớ ngẩn. –
Tại sao không xóa bài đăng này và giành được huy hiệu 'áp lực ngang hàng'? –
Tại sao điều này lại bị ảnh hưởng rất nhiều? Lý do không rõ ràng. – CaffeineConnoisseur