Python:如何检查调用del指令?

时间:2015-07-28 10:13:21

标签: python django testing mocking python-mock

我想测试功能:

#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

1 个答案:

答案 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