2016-09-08 16 views
7

pytestのドキュメントには、テストケースのさまざまな例がリストされています。それらのほとんどは機能のテストを示しています。しかし、私はクラスとクラスメソッドをテストする方法の例が欠落しています。我々は、我々がテストしたいモジュールcool.pyで以下のクラスがあるとしましょう:pytestによるクラスメソッドのテスト

class SuperCool(object): 

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

はどのようtests/test_cool.pyで応じたテストクラスを見ているのでしょうか? test_action()action()をテストするために使用することができますどのように

class TestSuperCool(): 

    def test_action(self, x): 
     pass 

答えて

5

あなたはクラスのメソッドをテストするためにやらなければならないことは、そのクラスをインスタンス化し、そのインスタンス上でメソッドを呼び出すです:

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

ので、pytestに関与マッピングのないようなものはありませんか? – laserbrain

+0

@laserbrainマッピングはどういう意味ですか? –

+0

@laserbrainこの場合マッピングが何を意味するのかよくわかりませんが、試してみると私の例がうまくいくはずです。 – elethan

2

まあ、一つの方法は、単なるテストメソッド内にオブジェクトを作成し、対話することですそこからそれで:

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

あなたは明らかに、ここでメソッドを使用してunittestの古典setupteardownスタイルのようなものを使用することができます。http://doc.pytest.org/en/latest/xunit_setup.html

pytestのドキュメントが恐ろしいであるため、私はそれらがどのように使用されるのか100%ではありません。

編集:ええので、どうやらあなたは

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

    ... 

    # test using self.sc down here 
0

ような何かを行う場合、私は、データのパラメータ化(データベース接続など)のテスト環境を作成するだけで任意の器具を使用します。あなたのデータは比較的簡単です場合

、あなたはテストケースの内側に、それを定義することができます。

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

例をパラメータ化して:

@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 
関連する問題