【发布时间】:2010-11-24 23:48:28
【问题描述】:
我想开始将单元测试集成到我的 Django 项目中,但我发现单元测试视图很棘手,因为 Django 使用函数实现视图的方式。
例如,如果函数具有 URL,则每个函数都是 Django 中的视图/页面。
如何对 Django 视图进行单元测试?
【问题讨论】:
标签: python django unit-testing views
我想开始将单元测试集成到我的 Django 项目中,但我发现单元测试视图很棘手,因为 Django 使用函数实现视图的方式。
例如,如果函数具有 URL,则每个函数都是 Django 中的视图/页面。
如何对 Django 视图进行单元测试?
【问题讨论】:
标签: python django unit-testing views
我不确定测试视图有多棘手。
您只需使用test client。
代码覆盖很容易。您推理 URL 请求如何映射到代码路径并发出适当的 URL 请求。
如果需要,您可以通过创建 Request 对象并检查 Response 对象来“手动”调用视图函数,但这样做的工作量太大。
如果您对代码覆盖率有疑问,这是一件好事。这意味着您有无法轻松映射到 URL 的代码(这是用户可以看到的所有 Web 应用程序。)如果您有没有映射到 URL 的代码,您可能应该 (a) 删除代码或 (b) 将其重构为单独的模块。
我们在视图函数之外还有很多模块。我们的视图函数导入这些模块。我们用普通的unittest来测试这些“视图函数外”的模块。
这是一个典型的结构。
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
【讨论】:
manage.py test。 80% 的时间,这就是你所需要的。如果你有更复杂的 RESTful web 服务(作为其他服务的服务器和客户端)或 Django “典型”框架之外的其他模块,那么你可能会发现不能简单地使用 Django 测试框架,需要额外编写 @ 987654324@ 测试。在这种情况下,您是 test_all 调用 Django,然后调用单元测试。不要调整他们的代码。只需编写您可以编写的最简单的脚本,该脚本使用他们的并使用 unittest。
unittest 的一部分。在这里小心,因为其中许多功能已经可用。
你可以试试tddspry - 帮助者集合,用鼻子测试和斜纹布测试 Django。鼻子也有覆盖插件,可以生成漂亮的覆盖报告。
【讨论】: