В вашем конкретном случае, почему бы просто не import a
, а затем a.file = "/tmp/a.txt"
?
Какая версия Python включена? Python 3.x имеет unittest.mock
, который является backported to 2.x on pypi.
Во всяком случае, если вы пытаетесь создать контекст конкретного макета:
>>> from mock import Mock
>>>
>>> # applies to module imports but doing it as a class here
... class A(object):
... file = 'xyz'
...
>>> some_a = Mock(file='abc')
>>> some_a.file
'abc'
>>>
>>> actual_a = A()
>>> actual_a.file
'xyz'
>>>
>>>
>>> def some_test():
... A = Mock(file='abc')
... assert A.file == 'abc'
... assert A.file != 'xyz'
...
>>> some_test()
>>> # no assertion error
Вы пытаетесь дразнить его во время импорта? На основе another SO answer:
>>> import sys
>>> sys.modules['A'] = Mock(file='abc')
>>> import A
>>>
>>> A.file
'abc'
>>> mocked_a = A
>>> mocked_a.file
'abc'
>>>
То, что вы хотите сделать, это создать «фальшивый» 'File' переменную, что вы будете в состоянии сделать тесты на? –