我知道我可以在这样的Python单元测试中调用assertRaises
:
self.assertRaises(ValueError, lambda: my_fxn(bad_arg))
如果我省略lambda
表达式,则my_fxn
之前评估assertRaises
,并且ValueError
函数可用于处理之前assertRaises
被抛出。
我不确定,以及我认为现有的关于此主题的答案不能很好地解释,为什么使用{{1这里修复了无法解决的异常问题。我知道lambda表达式通常用于将函数作为参数传递给另一个函数(或从另一个函数返回一个函数),但为了传递一个函数,它似乎不需要lambda
作为一个论点。例如,我可以毫不费力地致电lambda
:
assertEquals
那到底是怎么回事?似乎assertEquals(my_fxn(arg1), my_result)
以某种方式使用延迟"对lambda
的评价。它是如何工作的?
答案 0 :(得分:1)
assertRaises
调用该函数,捕获异常并传递测试。
您可以将其称为assertRaises(ValueError, my_fxn, bad_arg)
,并使用my_fxn
致电bad_arg
。
lambda
创建一个可调用的表达式,但不会调用它。所以你可以将lambda分配给一个名字:
my_name = lambda: my_fxn(bad_arg)
然后将其传递给assertRaises(也不调用它):
assertRaises(ValueError, my_name)
assertRaises
将在其中调用它,并且仅在函数未引发异常时才会失败。例如:
def assertRaises(error_type, function):
try:
function()
assertFail()
except error_type:
pass