首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python模拟测试模拟会话

Python模拟测试模拟会话
EN

Stack Overflow用户
提问于 2016-04-09 05:30:32
回答 1查看 2.8K关注 0票数 2

我正在学习如何使用Mock在Python中测试函数。我正在试着为一个简单的函数写一个测试,

代码语言:javascript
复制
@social.route('/friends', methods=['GET', 'POST'])
def friends():
    test_val = session.get('uid')
    if test_val is None:
        return redirect(url_for('social.index'))
    else:
        return render_template("/home.html")

然而,我被困在如何尝试模拟session.get('uid')值的问题上。到目前为止,这是我的尝试,

代码语言:javascript
复制
@patch('session', return_value='')
@patch('flask.templating._render', return_value='')
def test_mocked_render(self, mocked, mock_session):
    print "mocked", repr(self.app.get('/social/friends').data)
    print "was _render called?", mocked.called

这种尝试可能是完全错误的,这肯定是错误的方式,因为我仍然不能模拟会话。但是,有没有人能指导我正确地完成这件事?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-04-09 19:11:35

从Flask 0.8开始,我们提供了一个所谓的“会话事务”,它模拟了在测试客户端的上下文中打开会话并对其进行修改的适当调用。

让我们举一个简单的例子:app.py

代码语言:javascript
复制
from flask import Flask, session

app = Flask(__name__)
app.secret_key = 'very secret'


@app.route('/friends', methods=['GET', 'POST'])
def friends():
    test_val = session.get('uid')
    if test_val is None:
        return 'uid not in session'
    else:
        return 'uid in session'


if __name__ == '__main__':
    app.run(debug=True)

测试文件:test_app.py

代码语言:javascript
复制
import unittest

from app import app 


class TestSession(unittest.TestCase):
    def test_mocked_session(self):
        with app.test_client() as c:
            with c.session_transaction() as sess:
                sess['uid'] = 'Bar'
            # once this is reached the session was stored
            rv = c.get('/friends')
            assert rv.data == 'uid in session'


if __name__ == '__main__':
    unittest.main()

通过python test_app.py运行测试。

文档:Accessing and Modifying Sessions

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36509662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档