python - 构建处理 redis 和 cache_method 装饰器的测试

标签 python django unit-testing redis

所以我正在尝试使用 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

我怎样才能通过这些测试?

最佳答案

self.ObjectName.Method() 是否返回一个 QuerySet?如果不是,我会怀疑这是你的问题。 ObjectName.objects.filter(...) 将返回一个 QuerySet。如果您的方法返回任何其他内容,那么断言自然会失败。

更具体地说,ObjectName.objects.none() 将返回一个 django.db.models.query.EmtpyQuerySet 而 filter() 将返回一个 django .db.models.query.EmptyQuerySetdjango.db.models.query.QuerySet 取决于匹配过滤器的内容(如果有的话)。

所以您似乎在某个地方试图比较一个 ObjectName.method() 是: a) 不返回 QuerySet 而是返回一些不同的东西 -或者- b) 在需要 EmptyQuerySet 时(例如调用 none() 时)返回 QuerySet,反之亦然。

由于我们不知道 ObjectName.method() 是什么或它返回什么,您需要查看那个/那些方法以查看它返回什么以及可能为什么。

我希望这能为您指明正确的方向。

关于python - 构建处理 redis 和 cache_method 装饰器的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7654486/

相关文章:

Python - 检查字符串是否为空的成语,打印默认值

javascript - 如何为views.py中的对象创建属性,以便将更改后的对象传递给JS代码

python - 如何限制非作者的访问用户在 django 通用编辑 View 上发帖?

java - 为什么 void 方法在模拟对象上得到 NullPointerException?

python - Spyder、Python IDE 启动代码导致 GUI 崩溃

python - pandas.io.json.json_normalize 带有非常嵌套的 json

Python:在类方法上使用 contextmanager 的意外行为

python - 在 REST API 中填充 ManyToMany 字段值时严重影响性能(使用 django REST 框架)

javascript - Jest : TypeError: Cannot read property 'length' of undefined

c# - 为单元测试模拟 nhibernate getNamedQuery 的正确方法