python - mocking django settings: AttributeError: 'Settings' object has no attribute 'FOO' -



python - mocking django settings: AttributeError: 'Settings' object has no attribute 'FOO' -

attributes on settings disapear after using this:

.... here settings.foo exist. mock.patch('django.conf.settings.foo', 123, create=true): ... ... here settings.foo gone.

why happen?

i found old bug, can't believe still alive, since bug 4 years old:

http://code.google.com/p/mock/issues/detail?id=59

we utilize mock 1.0.1 pypi.

consider simple function:

testapp/views.py:

from django.conf import settings def return_settings_foo(): homecoming settings.foo

then in shell:

in [9]: testapp import views in [10]: print views.return_settings_foo() test in [11]:

next mock settings.foo:

in [11]: mock.patch('testapp.views.settings.foo', 'mocked'): print views.return_settings_foo() ....: mocked

so, must mock settings module calling it, (not located) case testapp/views.

test same:

import mock django.test import testcase testapp import views class testprintfoo(testcase): @mock.patch('testapp.views.settings.foo', 'mocked') def test_print(self): result = views.return_settings_foo() self.assertequal(result, 'mocked') def test_not_mocked_print(self): result = views.return_settings_foo() self.assertequal(result, 'test')

upd

one more thing. when utilize create=true on attribute exists, no matter, if existed or not, deleted after context end in __exit__, can utilize pdb see that. foo attr deleted after context

> /usr/local/lib/python2.7/dist-packages/mock.py(1381)__exit__() 1380 else: -> 1381 delattr(self.target, self.attribute) 1382 if not self.create , not hasattr(self.target, self.attribute): ipdb> self.target, self.attribute (<django.conf.lazysettings object @ 0x7f48f067db10>, 'foo') ipdb>

python django unit-testing mocking django-settings

Comments

Popular posts from this blog

Delphi change the assembly code of a running process -

json - Hibernate and Jackson (java.lang.IllegalStateException: Cannot call sendError() after the response has been committed) -

C++ 11 "class" keyword -