Я пытаюсь добавить простой мокинг в мои тесты, используя класс со статическими полями для хранения настроек (т. Е. Синглтон).Это прекрасно работает, когда я запускаю тест самостоятельно, но завершается неудачно, когда он запускается как часть полного набора тестов.
По какой-то причине глобальный класс является другим объектом между модулем tests.py ипроверенный код (несмотря на тот же процесс).
т.е.Вот упрощенный пример:
# in mock_settings.py
class MockSettings(object):
fake_random = False
# in views.py
def func(request)
print(os.getpid(), id(MockSettings))
if MockSettings.fake_random:
return HttpResponse('123')
else:
return HttpResponse(str(random.randint(1000)))
# in tests.py
def test_func(self):
print(os.getpid(), id(MockSettings))
MockSettings.fake_random = True
response = self.client.get('/func')
self.assertEquals(response.content, '123') # fails when ran as test suite, works when runs alone
Сумасшедшая вещь # 1: когда я запускаю только один тест (например, ./manage.py test tests.TestClass.test_func
), id(MockSettings)
одинаков в файлах tests.py иviews.py, но при запуске в наборе тестов (например, ./manage.py test
) pid совпадает, но идентификатор класса отличается - и, следовательно, fake_random
отличается ...
Сумасшедшая вещь # 2:когда я попытался воспроизвести его в новом проекте, я не смог.Когда я прокомментировал все другие тесты в моем проекте, это все же произошло.
Есть идеи, почему?