Python中Django单元测试问题求解

有一段如下代码是需要检查 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

Python中Django单元测试问题求解

7 回复

因为这个是用于鉴权的装饰器函数,不是直接的视图函数,所以不太能理解怎样对他写单元测试


我无法理解你的问题

写一个函数,确保函数是对的,装饰它,调用他,看装饰器的中间过程是否执行。可能是这样?单元测试嘛,就是模拟函数行为。
或者,你把返回的函数独立一下,对他做测试就行了,应为装饰器行为理论上是框架的测试保证,不是你的工作。

单元测试应避免使用复杂对象作为测试条件

所以我应该怎样去模拟?还是应该直接拆分?

拆分吧,反正你就是判断 session 中的参数值而已,只需要独立一个方法接收这个值进行判断逻辑处理,后续测试只需要对这个方法测试。

还有一个问题,假设我用一个视图类继承了 django 的 View 类,我有除了 Post,delete 以外的那些方法,
我应该怎样才能测试那些方法?还是应该把那些方法拆分到视图类意外,然后写单独的单元测试?

回到顶部