Есть ли способ заставить Python Pickle игнорировать ошибки "это не тот же объект"?
Я пишу тест, используя Mock, чтобы иметь точный контроль над результатами, которые производит datetime.utcnow (),Код, который я использую, чувствителен ко времени, поэтому патч mock облегчает тестирование.
В тех же тестах нужно выбирать объекты и отправлять результаты на удаленный сервер.В целях проверки, если стандартная дата и время были выбраны и получены удаленным сервером, все было бы хорошо.
К сожалению, модуль рассола работает со следующей ошибкой:
Можетсолёный: это не тот же объект, что и datetime.datetime
Вот минимальный пример для воспроизведения ошибки.
from mock import patch
from datetime import datetime
import pickle
class MockDatetime(datetime):
frozendt = datetime(2011,05,31)
@classmethod
def advance(cls, **kw):
cls.frozendt = cls.frozendt + timedelta(**kw)
@classmethod
def utcnow(cls):
return cls.frozendt
@patch('datetime.datetime', MockDatetime)
def test():
pickle.dumps(datetime.utcnow())
if __name__ == '__main__':
test()
Существуют ли какие-либо комбинации __reduce__
и __getstate__
методов, которые могли бы обмануть механизм рассола, заставив его думать, что MockDatetime - это время, когда я рассола?