我有一个Flask API('app'),它的定义类似于:
import redis
import pymongo
...
redis_client=redis.connect("redis url")
mongo_client = mongo.connect("mongo url")
@app.route('/dostuff', methods=['GET', 'POST'])
def do_stuff_with_dbs():
if request.method == 'POST':
redis_client.lpush(post_data)
mongo_client.create_one(post_data)
return 200
if request.method == 'GET':
list = redis_client.lrange(list, 0 ,-1)
docs = mongo_client.find({})
return list, docs
我想定义一个可以调用端点的测试,但是API创建了自己的数据库连接,所以我不知道如何模拟它们,因为它们没有传入。
这就是我想做的:
from app import app
def test_get():
response = app.test_client().get('/dostuff')
assert response.status_code = 200
assert response.data == {[list], {docs}}
...
我已经找到了很多关于如何模拟你传入的redis客户端的信息,但是这些端点不接受redis客户端参数,所以我不知道如何在应用程序端伪造连接。
任何信息或资源将不胜感激。
我试过模拟一些redis的示例,但当应用程序试图连接到redis时,总是出现错误。
1条答案
按热度按时间w51jfk4q1#
对于Mocking,您可以使用Mock Object Library from unittest。为了简单的使用,你可以这样做:
只是为了澄清,这将分别从
redis_client
和mongo_client
中模拟函数lrange
和find
。如果你想模拟更多的函数或整个对象,请查看库文档。作为一个个人的注意,而不是嘲笑,我建议你让他们指向一个为测试而创建的数据库。这将允许您进行更好的测试,因为您可以测试整个数据流。要做到这一点,你可以简单地做一些像这样的事情:
另外,如果你要做测试,我建议你看看python unittest library,这是非常有用的。