我如何对Django Views进行单元测试?

时间:2009-09-02 15:02:24

标签: python django unit-testing views

我想开始将单元测试集成到我的Django项目中,并且由于Django使用函数实现视图的方式,我发现单元测试视图很棘手。

例如,如果函数有URL,则每个函数都是Django中的视图/页面。

如何对Django视图进行单元测试?

3 个答案:

答案 0 :(得分:11)

我不确定如何测试视图很棘手。

您只需使用test client

代码覆盖很容易。您可以说明URL请求如何映射到代码路径并发出适当的URL请求。

如果需要,您可以通过创建Request对象并检查Response对象来“手动”调用视图函数,但这样做太多了。

如果您对代码覆盖率有疑问,那就太好了。这意味着您拥有无法轻松映射到URL的代码(这是用户可以看到的Web应用程序的全部内容。)如果您的代码未映射到URL,您可能应该(a)删除代码或(b)将其重构为一个单独的模块。

我们的视图功能之外有很多模块。我们的视图函数导入这些模块。我们用普通的单元测试来测试这些“视图功能外”模块。


这是一个典型的结构。

some_big_product/
|-- __init__.py
|-- settings.py
|-- urls.py
|-- logging.ini
|-- other_global_files.py
|-- an_app_1/
|   |-- __init__.py
|   |-- urls.py
|   |-- models.py
|   |-- views.py
|   |-- tests.py <-- the generic Django testing 
|   |-- app_specific_module.py
|   |-- app_specific_package/
|   |   |-- __init__.py
|   |-- test_app_specific_module.py <-- unittest 
|   |-- test_app_specific_package.py
|-- generic_module.py
|-- generic_package/
|   |-- __init__.py
|-- tests/
|   |-- test_this.py
|   |-- test_that.py
|   |-- test_all.py <-- not always practical
|-- scripts/
    |-- run_tests.sh 

答案 1 :(得分:2)

django.test.client应该拥有视图基本单元测试所需的一切。我也非常喜欢twillselenium来测试完整的堆栈。

答案 2 :(得分:0)

你可以尝试tddspry - 帮助收集用鼻子测试和斜纹测试Django。 Nose还有覆盖插件,可以生成相当覆盖的报告。