2012-12-18 31 views
6

Tôi đang cố gắng tạo một lớp Cơ sở với các thiết lập khác nhau mà tôi cần cho các thử nghiệm của mình. Tôi muốn tất cả các bài kiểm tra của mình được kế thừa từ lớp Cơ sở này. Là Á hậu, tôi sử dụng py.test.py.test không thu thập các thử nghiệm không được kế thừa từ 'đối tượng'

Nhưng khi tôi cố gắng làm như vậy, py.test không thu thập các thử nghiệm này được kế thừa từ Lớp cơ sở và kết quả là nó không chạy chúng. Không tìm thấy bất kỳ thông tin hữu ích nào trong tài liệu.

Có thể ai đó đã gặp phải các vấn đề như vậy trước đây? Bất kỳ ý tưởng?

Cảm ơn.

P.S. Khi thử nghiệm được kế thừa từ đối tượng mọi thứ hoạt động tốt. Py.test nhìn thấy chúng và chạy một cách chính xác.

Ví dụ mã:

lớp cơ sở của tôi:

class BaseClass(object): 
"""BaseClass""" 
def __init__(self): 
    super(BaseClass, self).__init__() 
    self.bla = 'bla' 

class Test My:

import pytest 
from base_class import BaseClass 

class TestSmth(BaseClass): 
    def test_test(self): 
     test_instatnce = TestSmth() 
     print test_instatnce.bla 

if __name__ == '__main__': 
    pytest.main([__file__, '-v']) 

Output:

============================= test session starts ============================== 
platform darwin -- Python 2.7.2 -- pytest-2.3.3 -- /usr/bin/python 
collecting ... collected 0 items 

=============================== in 0.01 seconds =============================== 
[Finished in 0.4s] 

Trả lời

5

Tôi không nghĩ rằng bạn có thể sử dụng __init__. Nếu bạn biết những gì để thiết lập (hoặc khởi tạo) các lớp bạn có thể làm:

# base_class.py 

class BaseClass(object): 
"""BaseClass""" 

    @classmethod 
    @pytest.fixture(scope = "class", autouse = True) 
    def setup(self): 
     self.bla = 'bla' 

#test_class.py 

import pytest 
from base_class import BaseClass 

class TestSmth(BaseClass): 
    def test_test(self): 
     print self.bla 

if __name__ == '__main__': 
    pytest.main([__file__, '-v']) 

Cũng để khởi tạo lớp TestSmth bạn có thể tạo ra một "phương pháp" và trang trí nó với @pytest.fixture là tốt. BAO GIỜ, bạn phải nhớ rằng những phương pháp khởi tạo "" được gọi theo thứ tự bảng chữ cái.

+0

Alex, Cảm ơn! Đó là chính xác những gì tôi cần! –

+0

Các chức năng cố định được sắp xếp theo phạm vi, vì vậy tất cả các đồ đạc có phạm vi lớp sẽ thực thi trước các hàm được sắp xếp theo hàm. Trong mỗi phạm vi thứ tự không được xác định, có thể là chữ cái nhưng điều đó sẽ là ngẫu nhiên. – hpk42

+0

@ hpk42, Chữ cái trong bảng chữ cái trong một lớp. :) Bạn có thể thử nó cho chính mình: https://bitbucket.org/alex_okrushko/pytest-class-init-order/commits/e3f316d6597c57e22a82362643197140 –

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