テスト ランナーでデコレータを無効にできます。モデルが読み込まれる前にテスト環境が設定されます。
例えば:
from django.test.simple import DjangoTestSuiteRunner
from utils import decorators
class PatchTestSuiteRunner(DjangoTestSuiteRunner):
def setup_test_environment(self, **kwargs):
super(PatchTestSuiteRunner, self).setup_test_environment(**kwargs)
self.__orig_memoize = decorators.memoize
decorators.memoize = lambda x: x
def teardown_test_environment(self, **kwargs):
decorators.memoize = self.__orig_memoize
super(PatchTestSuiteRunner, self).teardown_test_environment(**kwargs)
次に、あなたに入れますsettings.py
:
TEST_RUNNER = 'test.PatchTestSuiteRunner'
テストはメモ化せずに実行できます。
# myapp/models.py
class TestObject(object):
def __init__(self, value):
self.value = value
@memoize
def get_value(self):
return self.value
# myapp/test.py
from django.test import TestCase
from .models import TestObject
class NoMemoizeTestCase(TestCase):
def test_memoize(self):
t = TestObject(0)
self.assertEqual(t.get_value(), 0)
t.value = 1
self.assertEqual(t.get_value(), 1)
テスト ランナーの元のデコレータを復元teardown_test_environment
していますが、メモ化は既に装飾された関数では復元されないことに注意してください。より複雑なテスト デコレータを使用すればメモ化を復元できますが、これは標準的なユース ケースではおそらく必要ありません。