gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:03:18 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com