我有一些代码检查属性以确保它可以转换为整数。它通过添加try / except块然后引发更具信息性的异常来实现。但是,当我使用AssertRaises检查我的测试中的异常时,不会调用该对象的析构函数!我无法弄清楚对象的引用是如何在测试函数范围之外存活的。有谁知道幕后发生了什么才能实现这一目标?
这是我的代码被剥离到了失败:
class Dummy:
def __init__(self):
print("initing")
def __del__(self):
print("deleting")
def f(self, val):
try:
int(val)
except:
raise Exception("what?")
class MyTest(unittest.TestCase):
def test_dummy(self):
print("Starting test")
d = Dummy()
self.assertRaisesRegex(Exception,
"what?",
d.f,
'one',
)
print("Ending test")
这是测试输出:
Starting test
initing
Ending test
----------------------------------------------------------------------
Ran 1 tests in 0.001s
请注意,它不会打印'删除'
只有在我的函数的异常块中引发异常时才会发生这种情况。如果我使用if / else并引发异常,则不会发生这种情况。
当使用常规的旧AssertRaises时也会发生这种情况,当使用AssertRaises作为上下文时会发生这种情况。