在pytest parametrize中使用类型错误消息

时间:2017-01-30 12:54:08

标签: python pytest

我有一个函数,当满足某些条件时会引发TypeError。

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

我想使用pytest parametrize测试此消息。

但是,因为我正在使用其他参数,我想要这样的设置:

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

简单地将Message作为预期输出放在参数化测试数据中,给我一个失败的测试。

1 个答案:

答案 0 :(得分:2)

您不能将邮件错误视为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

所以,在你的情况下,这将是类似

AttributeError: 'module' object has no attribute 'scalar'