2017-08-22 12 views
0

私はpyestによるパラメータ化されたテストについて学んでいます。 the relevant pytest documentationに従った後、私はこの単純な例を思い付いた:pytestによるテストのパラメータ化

import unittest 

import pytest 


@pytest.fixture(autouse=True, params=['foo', 'bar']) 
def foo(request): 
    print('fixture') 
    print(request.param) 


class Foo(unittest.TestCase): 
    def setUp(self): 
     print('unittest setUp()') 

    def test(self): 
     print('test') 

これは、次のエラーを与える:

Failed: The requested fixture has no parameter defined for the current test. 
E    
E    Requested fixture 'foo' defined in: 
E    tests/fixture.py:7 

7行目はdef foo(request):です。

このエラーはどのような原因があり、解決するにはどうすればよいですか?

+0

私は通常は「( '@のpytest.mark.parametriseを使用リクエスト '、[' foo '、' bar ']) '。あなたの質問に答えることはできませんが、速い修正( 'request'は引数の名前です)のように働くかもしれません。 – Artyer

+0

@Artyer提案に感謝します。私がリンクしているドキュメントにはこれがないので、私が間違っていることを学ぶことにはまだ興味があります。 –

+0

@Artyerが彼の例で言ったように、 "要求"と名前をつけて値を渡しているので、問題がそのエラーで言及されているようだと思います。あなたのコードでは、リクエスト引数をfoo関数に渡しますが、フィクスチャ内で定義していないため、パラメータはありません。 –

答えて

1

フィクスチャの目的は、テストケースにオブジェクトを渡すことですが、作成したフィクスチャは返されず、何も返されません。

次に、私はあなたがunittest TestCaseメソッドにオブジェクトを渡すことができないと確信しています。私は、selfパラメータといくつかの競合が発生するかもしれないと思います。

反対側では、それは簡単な関数を扱うことができますが:

@pytest.fixture(autouse=True, params=['foo', 'bar']) 
def foo(request): 
    print('fixture') 
    print(request.param) 
    yield request.param 

# class Foo(unittest.TestCase): 
#  def setUp(self): 
#   print('unittest setUp()') 
# 
#  def _test(self): 
#   print('test') 

def test_fixture(foo): 
    assert foo == 'foo' 

>>> 1 failed, 1 passed in 0.05 seconds 
# test 1 run with foo : OK 
# test 2 run with bar : FAILED 

EDIT:確かに

Why cant unittest.TestCases see my py.test fixtures?

+0

私はpytestで私のユニットテストを書き直しました。私にこの方向に向かうリンクをありがとう。 –

関連する問題