2017-01-30 3 views
0

いくつかの条件が満たされたときにTypeErrorを発生させる関数があります。pytestパラメーターで型エラーメッセージを使用

def myfunc(..args here...): 
    ... 
    raise TypeError('Message') 

pytestパラメータを使用してこのメ​​ッセージをテストします。

しかし、私は他の引数を使用していますまた、私はこのような設定にしたいので:パラメータ化のテストデータに期待される出力としてMessageを入れ

testdata = [ 
     (..args here..., 'Message'), # Message is the expected output 
    ] 

    @pytest.mark.parametrize(
     "..args here..., expected_output", testdata) 
    def test_myfunc(
     ..args here..., expected_output): 

     obs = myfunc() 
     assert obs == expected_output 

シンプルで、私の失敗のテストを提供します。

答えて

1

通常の出力であるメッセージエラーは、myfuncとすることはできません。このための特別なコンテキストマネージャがあります - pytest.raises。あなたは

def test_raises(): 
    with pytest.raises(Exception) as excinfo: 
     raise Exception('some info') 
    assert str(excinfo.value) == 'some info' 

ので、いくつかのエラーとそのメッセージを期待したい場合

For exampleは、あなたのケースで、これは私が、それを試して、エラーのどのような種類

testdata = [ 
    (..args here..., 'Message') 
] 

@pytest.mark.parametrize("..args here..., expected_exception_message", testdata) 
    def test_myfunc(..args here..., expected_exception_message): 
     with pytest.raises(TypeError) as excinfo: 
      obs = myfunc(..args here...) 
     assert str(excinfo.value) == expected_exception_message 
+0

のようなものになるだろう私 'はAttributeErrorがスローされます: '例外TypeError' オブジェクトは何の属性がありません 'message''、または'はAttributeError: 'をとValueError 'STRで – George

+0

をmessage''' オブジェクトが属性を持っていません' (excinfo.value) 'うまく動作します!excinfoだけでもファイルのパスがわかります!正しい答えに修正してください。ありがとう! (私のコード 'raise TypeError( '{0}'。書式(message))'でraiseを期待していたら、 'message'を予期した出力に渡す方法はないと思いますよね? :)私が望んでいない機能の議論としてそれを使用すればもちろんです。 (upvoted) –

+0

をexpected_exception_message' STR(excinfo)=='とみ@George – George

関連する問題