2016-09-08 15 views
7

Trong tài liệu về các ví dụ khác nhau về các ví dụ khác nhau cho các trường hợp kiểm thử được liệt kê. Hầu hết trong số họ cho thấy các thử nghiệm chức năng. Nhưng tôi thiếu một ví dụ về cách kiểm tra các lớp và các phương thức lớp. Hãy nói rằng chúng tôi có các lớp sau trong module cool.py chúng tôi muốn kiểm tra:Thử nghiệm các phương pháp lớp với pytest

class SuperCool(object): 

    def action(self, x): 
     return x * x 

Làm thế nào để lớp thử nghiệm theo trong tests/test_cool.py phải tìm?

class TestSuperCool(): 

    def test_action(self, x): 
     pass 

Làm cách nào để sử dụng action()?

Trả lời

5

Tất cả bạn cần làm để thử nghiệm một phương pháp lớp học là nhanh chóng lớp đó, và gọi phương thức trên dụ rằng:

def test_action(self): 
    sc = SuperCool() 
    assert sc.action(1) == 1 
+0

Vì vậy, không có loại bản đồ có liên quan đến pytest? – laserbrain

+0

@laserbrain ý của bạn là gì khi ánh xạ? –

+0

@laserbrain Tôi không chắc chắn những gì bạn có nghĩa là bằng cách lập bản đồ trong trường hợp này, nhưng ví dụ của tôi sẽ làm việc cho bạn nếu bạn thử nó. – elethan

2

Vâng, một cách là chỉ cần tạo đối tượng của bạn trong phương pháp thử nghiệm và tương tác với nó từ đó:

def test_action(self, x): 
    o = SuperCool() 
    assert o.action(2) == 4 

Bạn dường như có thể sử dụng một cái gì đó giống như cổ điển theo phong cách setupteardown unittest bằng cách sử dụng phương pháp ở đây: http://doc.pytest.org/en/latest/xunit_setup.html

Tôi không phải là 100% cách chúng được sử dụng vì tài liệu hướng dẫn cho pytest là khủng khiếp.

chỉnh sửa: vâng như vậy rõ ràng nếu bạn làm điều gì đó như

class TestSuperCool(): 
    def setup(self): 
     self.sc = SuperCool() 

    ... 

    # test using self.sc down here 
0

Tôi sẽ sử dụng bất kỳ đồ đạc chỉ để tạo ra môi trường thử nghiệm (như kết nối cơ sở dữ liệu) hoặc parametrization dữ liệu.

Nếu dữ liệu của bạn là tương đối tầm thường, bạn có thể định nghĩa nó bên trong testcase:

def test_action_without_fixtures(): 
    sc = SuperCool() 
    sc.element = 'snow' 
    sc.melt() 
    assert sc.element == 'water' 

Ví dụ với parametrization:

@pytest.mark.parametrize("element, expected", [('snow', 'water'), ('tin', 'solder')]) 
def test_action_with_parametrization(element, expected): 
    sc = SuperCool() 
    sc.element = element 
    sc.melt() 
    assert sc.element == expected 
Các vấn đề liên quan