如何测试该类__init__方法使用pytest中的fixture引发异常(Python)

时间:2017-10-12 23:10:04

标签: python unit-testing instantiation

我正在尝试使用pytest(单元测试)获得更多技能。

我尝试测试在没有必须参数的情况下实例化类时是否引发异常。

我尝试为此创建一个fixture但是这会导致一个问题,即当调用fixture时,它会尝试使用缺少的参数在其中创建类,并在pytest实际断言异常被引发之前引发我的异常。

我设法通过不使用fixture而只是在测试函数中实例化类来克服这个问题,但我想知道是否有更优雅的方法来使用fixture。

示例类:

class MyClass(object):

    def __init__(self, must_have_parameter=None):

    if not must_have_parameter:

        raise ValueError("must_have_parameter must be set.")

当在测试中尝试使用此灯具时,我自然会收到错误。

@pytest.fixture()
def bad_class_instantiation():

    _bad_instance = MyClass()

    return _bad_instance

然后有一个测试:

def test_bad_instantiation(bad_class_instantiation):

    with pytest.raises(ValueError, message="must_have_parameter must be set."):

        bad_class_instantiation()

此测试失败,因为在测试用例运行之前类被实例化(这是我的解释)? 它仍然显示出现ValueError并显示自定义消息..

如果我将测试用例更改为:

def test_bad_instantiation():

    with pytest.raises(ValueError, message="must_have_parameter must be set."):

        bad_instance = MyClass()

然后测试通过。

有没有办法使用灯具,或者我应该在测试功能中调用类并调用它一天?

感谢您的时间。

托马斯

1 个答案:

答案 0 :(得分:1)

在这种情况下,我认为夹具没有任何好处。我只想在测试方法中创建对象。

使用带有默认值的可选参数,然后在缺少参数时引发异常似乎很奇怪。除非您确实需要自定义错误消息,否则请考虑删除默认值。