django 单元测试求解

2018-08-06 15:42:21 +08:00
 ray1888

有一段如下代码是需要检查 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
1622 次点击
所在节点    Python
6 条回复
ray1888
2018-08-06 15:43:27 +08:00
因为这个是用于鉴权的装饰器函数,不是直接的视图函数,所以不太能理解怎样对他写单元测试
jswh
2018-08-06 16:30:37 +08:00
写一个函数,确保函数是对的,装饰它,调用他,看装饰器的中间过程是否执行。可能是这样?单元测试嘛,就是模拟函数行为。
或者,你把返回的函数独立一下,对他做测试就行了,应为装饰器行为理论上是框架的测试保证,不是你的工作。
xrlin
2018-08-06 16:35:46 +08:00
单元测试应避免使用复杂对象作为测试条件
ray1888
2018-08-06 16:54:00 +08:00
@xrlin 所以我应该怎样去模拟?还是应该直接拆分?
xrlin
2018-08-06 17:02:34 +08:00
@ray1888 拆分吧,反正你就是判断 session 中的参数值而已,只需要独立一个方法接收这个值进行判断逻辑处理,后续测试只需要对这个方法测试。
ray1888
2018-08-07 11:40:31 +08:00
@xrlin 还有一个问题,假设我用一个视图类继承了 django 的 View 类,我有除了 Post,delete 以外的那些方法,
我应该怎样才能测试那些方法?还是应该把那些方法拆分到视图类意外,然后写单独的单元测试?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/477297

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX