我希望在否引发特殊异常时通过测试用例,并在发生ValueError时使测试用例仅 失败。从另一篇文章中获取一些信息,感觉也许有比try / except更好的方法 How to properly assert that an exception gets raised in pytest?
def test_exception():
try:
call some function:
except ValueError:
assert False
答案 0 :(得分:3)
如果仅在抛出ValueError时失败(并且传递所有其他异常,并且在根本没有异常的情况下传递),则您希望这样做:
def test_exception():
try:
call_some_function()
except ValueError:
assert False
except:
pass
如果要使确定引发异常,但不引发ValueError异常,则您需要这样做:
def test_exception():
try:
call_some_function()
assert False
except ValueError:
assert False
except:
pass
作为警告,这与大多数人想要测试的结果相反。不说您在做什么是错误的,但是通常您想测试是否抛出了某种异常:不是说没有抛出某种异常。如果那是您想要的,您会想要的:
def test_exception():
try:
call_some_function()
assert False
except ValueError:
pass
except:
assert False
或者您可以摆脱最后一个except
块,然后使其冒泡。区别仅在于“错误”和“失败”之间。无论哪种方式,您的测试套件都不会通过。
在样式方面,当您想显式失败时,我(和我合作的其他专业python开发人员)做到了一直。assert False
或assert 0
没什么问题。
编辑:最好将pytest.fail
与特定消息一起使用,而不要使用assert False
,特别是在有多个assert False
浮动的情况下。这样,您将知道哪个 assert
失败以及为什么添加有用的错误消息。
答案 1 :(得分:-1)
TestCase
类具有用于此情况的上下文管理器:
class TestSomething(TestCase):
def test_something(*args, **kwargs):
with self.assertRaises(ValueError) as e:
raise ValueError
# you can check status of e here for information
[编辑]
我意识到我回答了你的问题的反面。就个人而言,我只是让异常传播,并让pytest那样失败,但是我认为您上面的方法也很好。