V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ray1888
V2EX  ›  Python

django 单元测试求解

  •  
  •   ray1888 ·
    ray1888 · 2018-08-06 15:42:21 +08:00 · 1695 次点击
    这是一个创建于 2331 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一段如下代码是需要检查 request 的 session 的一个字段,怎样才能 mock 来修改这个字段来对这个函数进行测试?

    def Loginrequired(func: object) -> object:
        def checkLoginStatus(request):
            if request.session.get('IsLogin', 0) == 1:
                return func(request)
            return HttpResponseForbidden('Please Login first')
        return checkLoginStatus
    
    6 条回复    2018-08-07 11:40:31 +08:00
    ray1888
        1
    ray1888  
    OP
       2018-08-06 15:43:27 +08:00
    因为这个是用于鉴权的装饰器函数,不是直接的视图函数,所以不太能理解怎样对他写单元测试
    jswh
        2
    jswh  
       2018-08-06 16:30:37 +08:00
    写一个函数,确保函数是对的,装饰它,调用他,看装饰器的中间过程是否执行。可能是这样?单元测试嘛,就是模拟函数行为。
    或者,你把返回的函数独立一下,对他做测试就行了,应为装饰器行为理论上是框架的测试保证,不是你的工作。
    xrlin
        3
    xrlin  
       2018-08-06 16:35:46 +08:00
    单元测试应避免使用复杂对象作为测试条件
    ray1888
        4
    ray1888  
    OP
       2018-08-06 16:54:00 +08:00
    @xrlin 所以我应该怎样去模拟?还是应该直接拆分?
    xrlin
        5
    xrlin  
       2018-08-06 17:02:34 +08:00
    @ray1888 拆分吧,反正你就是判断 session 中的参数值而已,只需要独立一个方法接收这个值进行判断逻辑处理,后续测试只需要对这个方法测试。
    ray1888
        6
    ray1888  
    OP
       2018-08-07 11:40:31 +08:00
    @xrlin 还有一个问题,假设我用一个视图类继承了 django 的 View 类,我有除了 Post,delete 以外的那些方法,
    我应该怎样才能测试那些方法?还是应该把那些方法拆分到视图类意外,然后写单独的单元测试?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5698 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 03:11 · PVG 11:11 · LAX 19:11 · JFK 22:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.