所以我正在尝试使用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
我怎样才能通过这些测试?
答案 0 :(得分:0)
self.ObjectName.Method()
是否返回QuerySet?如果不是,我怀疑这是你的问题。 ObjectName.objects.filter(...)
将返回QuerySet。如果你的方法返回任何其他东西,那么断言自然会失败。
更具体地说,ObjectName.objects.none()
将返回一个django.db.models.query.EmtpyQuerySet,而filter()
将返回django.db.models.query.EmptyQuerySet
或django.db.models.query.QuerySet
,具体取决于具体内容,如果有的话,匹配过滤器。
所以在某处您似乎正在尝试比较ObjectName.method()
:
a)不返回QuerySet但不同的东西
-要么-
b)在期望EmptyQuerySet时返回QuerySet(例如当调用none()时),反之亦然。
由于我们不知道ObjectName.method()
是什么或它返回什么,因此您需要查看那些/那些方法以查看它返回的内容以及可能的原因。
我希望指出你正确的方向。