Có một vài vấn đề.
Trước hết, cách bạn đang sử dụng mock.patchkhông hoàn toàn đúng. Khi được sử dụng như một trình trang trí, nó thay thế hàm / lớp đã cho (trong trường hợp này datetime.date.today) bằng một Mockđối tượng chỉ trong hàm được trang trí . Vì vậy, chỉ trong phạm vi của bạn today()sẽ datetime.date.todaylà một chức năng khác, dường như không phải là những gì bạn muốn.
Những gì bạn thực sự muốn dường như giống như thế này:
@mock.patch('datetime.date.today')
def test():
    datetime.date.today.return_value = date(2010, 1, 1)
    print datetime.date.today()
Thật không may, điều này sẽ không hoạt động:
>>> test()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "build/bdist.macosx-10.6-universal/egg/mock.py", line 557, in patched
  File "build/bdist.macosx-10.6-universal/egg/mock.py", line 620, in __enter__
TypeError: can't set attributes of built-in/extension type 'datetime.date'
Điều này không thành công vì các loại tích hợp Python là bất biến - xem câu trả lời này để biết thêm chi tiết.
Trong trường hợp này, tôi sẽ tự phân lớp datetime.date và tạo hàm đúng:
import datetime
class NewDate(datetime.date):
    @classmethod
    def today(cls):
        return cls(2010, 1, 1)
datetime.date = NewDate
Và bây giờ bạn có thể làm:
>>> datetime.date.today()
NewDate(2010, 1, 1)
               
              
mockthư viện: voidspace.org.uk/python/mock/examples.html#partial-mocking