我想开始将单元测试集成到我的Django项目中,并且由于Django使用函数实现视图的方式,我发现单元测试视图很棘手。
例如,如果函数有URL,则每个函数都是Django中的视图/页面。
如何对Django视图进行单元测试?
答案 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)
答案 2 :(得分:0)
你可以尝试tddspry - 帮助收集用鼻子测试和斜纹测试Django。 Nose还有覆盖插件,可以生成相当覆盖的报告。