我希望测试用例在没有引发特定异常时通过,并在发生 ValueError 时仅失败。从另一篇文章中获取一些信息感觉也许有比尝试/异常(exception)更好的方法 How to properly assert that an exception gets raised in pytest?
def test_exception():
try:
call some function:
except ValueError:
assert False
最佳答案
如果您希望当且仅当抛出 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
如果您添加有用的错误消息,则失败以及原因。
关于python - 发生异常时测试失败的正确断言是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51431308/