Python 一个单元测试应该对它正在测试的功能了解多少?
我正在为缓存机制编写一个测试。该机制有两个缓存层,请求缓存和redis。请求缓存使用Python 一个单元测试应该对它正在测试的功能了解多少?,python,unit-testing,caching,flask,Python,Unit Testing,Caching,Flask,我正在为缓存机制编写一个测试。该机制有两个缓存层,请求缓存和redis。请求缓存使用Flask.g,该对象存储请求期间的值。它通过在Flask.g.\u cache属性上创建字典来实现这一点 然而,我认为确切的属性是我的单元测试不应该关心的实现细节。我想确保它将其值存储在Flask.g上,但我不关心它是如何做到的。什么是测试这个的好方法 我使用的是Python模拟模块,所以我知道我可以模拟'Flask.g,但我不确定是否有方法可以测试它是否有任何属性访问,而不关心它是哪个属性 对于这样的测试,这
Flask.g
,该对象存储请求期间的值。它通过在Flask.g.\u cache
属性上创建字典来实现这一点
然而,我认为确切的属性是我的单元测试不应该关心的实现细节。我想确保它将其值存储在Flask.g上,但我不关心它是如何做到的。什么是测试这个的好方法
我使用的是Python模拟模块,所以我知道我可以模拟'Flask.g,但我不确定是否有方法可以测试它是否有任何属性访问,而不关心它是哪个属性
对于这样的测试,这是正确的方法吗?就个人而言,如果要测试端点,就不应该模仿Flask.g。因为您将创建一个self.app(我可能不确定这部分) 其次,您需要模拟redis客户机,使用类似这样的内容作为返回的结构
class RedisTestCase(object):
saved_dictionary = {}
def keys(self, pattern):
found_keys = []
for key in RedisTestCase.saved_dictionary: #loop keys for pattern
if pattern:
found_keys.append(key)
return found_keys
def delete(self, keys):
for key in keys:
if key in RedisTestCase.saved_dictionary:
del RedisTestCase.saved_dictionary[key]
def mset(self, items):
RedisTestCase.saved_dictionary.update(items)
def pipeline(self):
return RedisTestCase()
与其查看测试中缓存的具体情况,不如确保
昂贵的\u op\u 1
和昂贵的\u op\u 2
不会被多次调用?数据缓存在哪里并不重要(就测试而言),关键是数据是否被缓存并重新使用,而不是您想要测试的重新请求。(或者我误解了你的问题?)嗯,请求缓存比去redis快得多。