создание тестов, которые работают с redis и cache_method decorator - PullRequest
1 голос
/ 05 октября 2011

Итак, я пытаюсь создать несколько тестов для проекта, используя redis, но у меня есть два метода, которые доставляют мне проблемы.

оба метода используют декоратор @cache_method() и выдают отчет об ошибке, похожий на AssertionError: [] != [] или AsserionError: [<ObjectName: instance_name>] != [<ObjectName: instance_name>].Оба теста являются чем-то вроде:

self.assertEquals(self.ObjectName.Method(), ObjectName.objects.none())

или

self.assertEquals(self.ObjectName.Method(), ObjectName.objects.filter(...))

Если я использую что-то вроде self.assertEquals(type(), type()), тест проходит успешно, поэтому я в полной растерянности.

мой тестовый класс выглядит так:

class SimpleTest(TestCase):

    def setUp(self):
        self.reset_pool()
        self.cache = self.get_cache()
        self.cache.clear()

        ... setup a bunch of self.Object instances for the actual tests ...

    def reset_pool(self):
        if hasattr(self, 'cache'):
            self.cache._client.connection_pool.disconnect()

    def get_cache(self, backend=None):
        if VERSION[0] == 1 and VERSION[1] < 3:
            cache = get_cache(backend or 'redis_cache.cache://127.0.0.1:6379?db=15')
        elif VERSION[0] == 1 and VERSION[1] >= 3:
            cache = get_cache(backend or 'default')
        return cache

Как я могу пройти эти тесты?

1 Ответ

0 голосов
/ 10 февраля 2012

Возвращает ли self.ObjectName.Method() QuerySet?Если нет, я бы заподозрил, что это твоя проблема.ObjectName.objects.filter(...) вернет QuerySet.Если ваш метод возвращает что-то еще, то, естественно, assert не выполнится.

Более конкретно, ObjectName.objects.none() вернет django.db.models.query.EmtpyQuerySet, а filter() вернет либо django.db.models.query.EmptyQuerySet, либоdjango.db.models.query.QuerySet в зависимости от того, что, если вообще, соответствует фильтру.

Так что, кажется, где-то вы пытаетесь сравнить ObjectName.method(), который либо: а) не возвращает QuerySet, но что-то другое -или-) возвращает QuerySet, когда ожидается EmptyQuerySet (например, когда не вызывается none ()), или наоборот.

Поскольку мы не знаем, что такое ObjectName.method() или что он возвращает, выМне нужно изучить этот / те метод (ы), чтобы увидеть, что он возвращает и, возможно, почему.

Надеюсь, это указывает на правильное направление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...