单元测试应该知道它正在测试的功能多少?

时间:2015-01-15 17:14:01

标签: python unit-testing caching flask

我正在为缓存机制编写测试。该机制有两个缓存层,即请求缓存和redis。请求缓存使用Flask.g,该对象存储请求持续时间的值。它通过在Flask.g._cache属性上创建字典来实现此目的。

但是,我认为确切的属性是我的单元测试不应该关心的实现细节。我想确保它将其值存储在Flask.g上,但我并不关心它是如何做到的。什么是测试这个的好方法?

我正在使用Python模拟模块,所以我知道我可以嘲笑`Flask.g,但我不确定是否有方法来测试是否有任何属性访问权限在它上面,没有关心它属于哪个属性。

对于像这样的测试,这甚至是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

如果您正在测试端点,就个人而言,您不应该嘲笑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()