我想测试功能:
#foo_module.py
def foo(*args, **kwargs):
bar = SomeClass(*args, **kwargs)
# actions with bar
del bar
我选择测试模拟库。我的测试看起来像:
@mock.patch('path.to.foo_module.SomeClass')
def test_foo(self, mock_class):
foo()
mock_class.assert_called_once_with()
但我怎么能检查'del bar'是否被执行了?
调用mock_class.return_value.__del__
会引发AttributeError。
UPD :
抱歉,我没有提到SomeClass是django.contrib.gis.gdal.datasource.DataSource
。 DataSource已覆盖__del__
方法:
def __del__(self):
"Destroys this DataStructure object."
if self._ptr and capi:
capi.destroy_ds(self._ptr)
在这种情况下,del bar
在函数外部有效。所以我应该简单地模仿capi
并检查capi.destroy_ds.called
。
答案 0 :(得分:-1)
检查dir()结果以查看该对象是否仍然存在:
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> a=10
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'a']
>>> del a
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
对于这个脚本:
def f() :
a = 10
print dir()
del a
print dir()
objLst = dir()
if 'a' not in objLst :
print 'Object deleted'
f()
你得到了输出:
['a']
[]
Object deleted