2016-09-08 19 views
7

W dokumentacji programu pytest wyświetlane są różne przykłady przypadków testowych. Większość z nich pokazuje test funkcji. Ale brakuje mi przykładu, jak przetestować klasy i metody klasy. Powiedzmy, że mamy następujące klasy w module cool.py lubimy Test:Testowanie metod klas z pytestem

class SuperCool(object): 

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

jaki sposób według klasa test tests/test_cool.py trzeba szukać?

class TestSuperCool(): 

    def test_action(self, x): 
     pass 

Jak test_action() być wykorzystywane do testowania action()?

Odpowiedz

5

Wszystko, co trzeba zrobić, aby przetestować metody klasy jest instancję tej klasy i wywołać metodę na ten przykład:

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

Tak, nie ma rodzaju mapowania zaangażowany w pytest? – laserbrain

+0

@laserbrain co rozumiesz przez mapowanie? –

+0

@laserbrain Nie jestem pewien, co masz na myśli przez mapowanie w tym przypadku, ale mój przykład powinien działać dla ciebie, jeśli spróbujesz. – elethan

2

Cóż, jednym ze sposobów jest po prostu stworzyć swój przedmiot w metodzie badania i interakcji z nim stamtąd:

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

można używać widocznie coś klasycznego setup i teardown stylu unittest stosując metody tutaj: http://doc.pytest.org/en/latest/xunit_setup.html

Nie jestem w 100% tym, w jaki sposób są używane, ponieważ dokumentacja dla pytest to straszna.

edit: Tak więc pozornie jeśli robisz coś takiego

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

    ... 

    # test using self.sc down here 
0

użyłbym tylko żadnych urządzeń do tworzenia środowiska testowego (jak połączenia z bazą danych) lub parametryzacji danych.

Jeśli dane są stosunkowo błahe, można określić go wewnątrz testcase:

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

Przykład z parametryzacji:

@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 
Powiązane problemy