Ошибка при выполнении команды 'ant' в Mac OS X 10.9 Mavericks при сборке для Android с PhoneGap / Cordova

Вы можете использовать следующий подход, основанный на решении Daniel G. У этого есть преимущество не нарушать проверку типа с помощью isinstance(d, datetime.date).

import mock

def fixed_today(today):
    from datetime import date

    class FakeDateType(type):
        def __instancecheck__(self, instance):
            return isinstance(instance, date)

    class FakeDate(date):
        __metaclass__ = FakeDateType

        def __new__(cls, *args, **kwargs):
            return date.__new__(date, *args, **kwargs)

        @staticmethod
        def today():
            return today

    return mock.patch("datetime.date", FakeDate)

В основном мы заменяем класс на основе C datetime.date нашим собственным подклассом python, который создает оригинальные экземпляры datetime.date и отвечает к isinstance() запросам точно как native datetime.date.

Используйте его в качестве менеджера контекста в своих тестах:

with fixed_today(datetime.date(2013, 11, 22)):
    # run the code under test
    # note, that these type checks will not break when patch is active:
    assert isinstance(datetime.date.today(), datetime.date)

Аналогичный подход может использоваться для издевательства функции datetime.datetime.now().

139
задан Unihedron 4 November 2014 в 11:19
поделиться