如何对Django的基于类的视图中的方法进行单元测试?

2024-04-28 15:06:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在基于django类的视图中测试方法和helper函数。

考虑这个基于类的视图:

class MyClassBasedView(View):

    def dispatch(self, request, *args, **kwargs):
        ....

    def __get_render_dict():
        d = {}
        ...
        return d

    def my_method(self):
        render_dict =  self.__get_render_dict()
        return render_response(self.request, 'template.html', render_dict)

为了为我的视图编写单元测试,我需要调用内部的方法,比如直接调用__get_render_dict()。我怎样才能做到这一点?。

我试过了

v = MyClassedBasedView() 
v.dispatch(request,args, kwargs)
v.__method_name()

但是在post/get方法中没有匹配的参数时失败,即使我在没有使用URL的情况下调用direclty方法。


Tags: django方法selfhelper视图getreturnrequest
2条回答

要在unittests中使用基于类的视图,请尝试here中的setup_view

def setup_view(view, request, *args, **kwargs):
    """
    Mimic ``as_view()``, but returns view instance.
    Use this function to get view instances on which you can run unit tests,
    by testing specific methods.
    """

    view.request = request
    view.args = args
    view.kwargs = kwargs
    return view

您仍然需要向它发送一个请求,可以使用^{}

    factory = RequestFactory()
    request = factory.get('/customer/details')

然后,您可以联合测试您的方法:

v = setup_view(MyClassedBasedView(), request) 
v.method_name()

我通过MyClassedBasedView.as_view()(request)解决了这个问题

相关问题 更多 >