我正在尝试使用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()
然后测试通过。
有没有办法使用灯具,或者我应该在测试功能中调用类并调用它一天?
感谢您的时间。
托马斯
答案 0 :(得分:1)
在这种情况下,我认为夹具没有任何好处。我只想在测试方法中创建对象。
使用带有默认值的可选参数,然后在缺少参数时引发异常似乎很奇怪。除非您确实需要自定义错误消息,否则请考虑删除默认值。