`
luliangok
  • 浏览: 816853 次
文章分类
社区版块
存档分类
最新评论

Django实战(10):单元测试

 
阅读更多

尽早进行单元测试(UnitTest)是比较好的做法,极端的情况甚至强调“测试先行”。现在我们已经有了第一个model类和Form类,是时候开始写测试代码了。

Django支持python的单元测试(unit test)和文本测试(doc test),我们这里主要讨论单元测试的方式。这里不对单元测试的理论做过多的阐述,假设你已经熟悉了下列概念:test suite, test case, test/test action, test data, assert等等。

在单元测试方面,Django继承python的unittest.TestCase实现了自己的django.test.TestCase,编写测试用例通常从这里开始。测试代码通常位于app的tests.py文件中(也可以在models.py中编写,但是我不建议这样做)。在Django生成的depotapp中,已经包含了这个文件,并且其中包含了一个测试用例的样例:

depot/depotapp/tests.py


你可以有几种方式运行单元测试:
python manage.py test:执行所有的测试用例
python manage.py test app_name, 执行该app的所有测试用例
python manage.py test app_name.case_name: 执行指定的测试用例


用第三中方式执行上面提供的样例,结果如下:
$ python manage.py test depotapp.SimpleTest
Creating test database for alias 'default'...
.
----------------------------------------------------------------------
Ran 1 test in 0.012s

OK
Destroying test database for alias 'default'...

你可能会主要到,输出信息中包括了创建和删除数据库的操作。为了避免测试数据造成的影响,测试过程会使用一个单独的数据库,关于如何指定测试数据库的细节,请查阅Django文档。在我们的例子中,由于使用sqlite数据库,Django将默认采用内存数据库来进行测试。


下面就让我们来编写测试用例。在《Agile Web Development with Rails 4th》中,7.2节,最终实现的ProductTest代码如下:


对Product测试的内容包括:

1.title,description,price,image_url不能为空;

2. price必须大于零;

3. image_url必须以jpg,png,jpg结尾,并且对大小写不敏感;

4. titile必须唯一;

让我们在Django中进行这些测试。由于ProductForm包含了模型校验和表单校验规则,使用ProductForm可以很容易的实现上述测试:

depot/depotapp/tests.py


然后运行 python manage.py test depotapp.ProductTest。如同预想的那样,测试没有通过:

Creating test database for alias 'default'...
.F..
======================================================================
FAIL: test_imgae_url_endwiths (depot.depotapp.tests.ProductTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/holbrook/Documents/Dropbox/depot/../depot/depotapp/tests.py", line 65, in test_imgae_url_endwiths
self.assertTrue(f.is_valid(),msg='error when image_url endwith '+endwith)
AssertionError: False is not True : error when image_url endwith FRED.JPG

----------------------------------------------------------------------
Ran 4 tests in 0.055s

FAILED (failures=1)
Destroying test database for alias 'default'...

因为我们之前并没有考虑到image_url的图片扩展名可能会大写。修改ProductForm的相关部分如下:


然后再运行测试:

$ python manage.py test depotapp.ProductTest
Creating test database for alias 'default'...
....
----------------------------------------------------------------------
Ran 4 tests in 0.060s

OK
Destroying test database for alias 'default'...

测试通过,并且通过单元测试,我们发现并解决了一个bug。




分享到:
评论

相关推荐

    《Django实战》源码(第一、第二版) .zip

    9. **测试**:Django提供了强大的单元测试框架。了解如何编写和运行测试,以及如何使用模拟对象来隔离测试。 10. **部署**:了解如何将Django项目部署到服务器,包括配置WSGI服务器(如Gunicorn)和反向代理服务器...

    Django项目测试实战代码

    Django提供了内置的测试框架,使得开发者能够编写和执行单元测试、集成测试以及功能测试,以便在项目的各个阶段检测潜在的问题。 一、Django测试基础 1. 单元测试:单元测试关注的是程序的最小可测试单元,如函数...

    Django入门与实践教程1

    【第一个单元测试】章节介绍了Django的测试框架,教导读者编写测试用例,确保代码的质量和稳定性。测试驱动开发是现代Web开发的最佳实践。 【静态文件设置】和【Django Admin介绍】章节分别讲解如何处理项目的静态...

    Django Web开发指南.pdf

    - 单元测试的编写。 - 测试的执行和结果查看。 10. Django的扩展和第三方包: Django拥有一个庞大的第三方生态系统,提供了各种各样的扩展和应用: - 如何查找和使用第三方包。 - 如何开发Django的扩展应用。 ...

    pythonProject1_DEMO_django_

    - 测试与调试:使用Django内置的测试框架进行单元测试和集成测试。 5. Django管理命令: - `runserver`:启动本地开发服务器。 - `shell`:进入Python交互环境,方便查询数据库。 - `createsuperuser`:创建...

    Django企业开发教程实战.zip

    - 编写单元测试,确保代码质量。 - 使用Django内置的`manage.py test`命令运行测试。 - 使用debug-toolbar等工具进行性能分析和调试。 通过这个Django企业开发教程实战,你将不仅学习到Django的基本使用,还能...

    Django企业开发实战对应项目代码

    它还支持**测试驱动开发(TDD)**,内置的测试框架让单元测试和集成测试变得简单。 总结来说,Django企业开发实战涉及了众多方面,从基础的模型、视图、模板、URL配置,到高级的主题如中间件、表单、安全性和性能...

    django_project:我的Django教育

    1. **manage.py**:这是一个命令行工具,用于执行各种管理任务,如启动开发服务器、迁移数据库、运行单元测试等。 2. **requirements.txt**:这个文件列出了项目所需的所有外部库和它们的版本,以便于在新的环境中...

    django_practice:种族主义

    6. tests:存放项目的单元测试和集成测试。 7. migrations:Django的数据库迁移文件,记录了数据库结构的变化。 综上所述,这个项目可能是使用Python的Django框架创建的一个Web应用,其核心目标是围绕种族主义议题...

    day24_Django项目实战歌曲搜索.zip

    Django提供了内置的测试框架,可以帮助我们编写和运行单元测试。 10. 部署: 完成开发后,我们需要将项目部署到服务器上,让其他人可以访问。这涉及到配置服务器环境、安装必要的依赖、设置Wsgi服务器等步骤。 ...

    tango_with_django_project:单

    7. **单元测试**:如何编写和运行单元测试以确保代码质量,包括Django测试框架的使用方法。 8. **静态文件和媒体文件**:管理项目的静态资源(如CSS、JavaScript)和用户上传的文件。 9. **部署和服务器配置**:如何...

    HelloDjango - Django博客教程(第二版)-追梦人物的博客.pdf

    - Step1:使用Django开发个人博客,涵盖了Django基础、Docker部署和单元测试技术。 - Step2:开发Restful API,使用django-restframework来为博客提供后端接口。 - Step3:开发Vue待办事项应用,初步接触Vue.js...

    Django实战教程(基本知识教程 + 源码)

    Django实战教程 1.Django快速上手 2.深入模型 3.静态资源和Ajax请求 4.Cookie和Session 5.制作报表 6.日志和调试工具栏 7.中间件的应用 8.前后端分离开发入门 9.RESTful架构和DRF入门 10.RESTful架构和DRF进阶 11....

    全套百度云教程:python基础+进阶+项目篇 (含Django和Tornado)

    7. **测试与调试**:单元测试框架的使用、常见调试技巧。 #### 三、Django框架 Django是一个用Python编写的开源Web框架,它遵循MVC(Model-View-Controller)设计模式,并且提供了一系列强大而灵活的功能来简化Web...

    基于Django快速开发Web应用

    4. **测试**:Django内置了测试框架,支持单元测试、集成测试,保证代码质量。 总之,Django为Python开发者提供了全面的工具集,使得Web应用开发变得更加高效和便捷。无论是初学者还是经验丰富的开发者,都能从中...

    最简单的django入门与实践开发

    第一个单元测试:单元测试用于确保代码的每个独立部分按预期工作。Django鼓励测试驱动开发(TDD),因此在项目中编写测试是非常重要的。 静态文件设置:在Web开发中,静态文件包括CSS、JavaScript、图片等资源。...

    django 1.3 官方手册

    - **应用程序测试**:提供了 Django 应用测试的最佳实践,包括单元测试、集成测试、自动化测试等。 - **用户认证**:详细说明了 Django 用户认证系统的使用方法,包括用户注册、登录、权限管理等。 - **缓存框架**:...

    Django实战代码(7月26日)_培训_培训网站开发源代码_django下月_marketjfl_django_

    9. **测试**:为了确保代码质量,项目中可能包含`tests.py`文件,用于编写单元测试和集成测试,确保各个功能的正确性。 10. **部署**:项目可能还包含一些配置文件,如`settings_production.py`,用于在生产环境下...

    Django开发电子商务

    8. 测试和部署:电子商务应用需要经过彻底的测试才能上线,因此书中也可能会涵盖Django项目的单元测试、集成测试方法以及部署策略。 通过以上内容的介绍,读者可以期待掌握Django框架在构建电子商务应用方面的重要...

    【项目实战】Python基于Django框架实现校园网上一站式购物系统

    在项目实战中,我们还会接触到测试驱动开发(TDD),使用Django内置的测试框架编写单元测试,确保代码的质量和稳定性。此外,Django的中间件(Middleware)和自定义管理命令(Management Commands)也是提高项目灵活...

Global site tag (gtag.js) - Google Analytics