【有书共读】《Python测试驱动给开发》读书笔记03
使用单元测试测试简单的首页
第一个Django应用,第一个单元测试
首先要创建一个Django的app
>>> python manage.py startapp lists
单元测试与功能测试的区别
单元测试应成为您编写代码的核心环节,当您所做的项目时限很紧并且您希望控制开发进度时尤其如此。由于单元测试是如此重要,所以您应该先编写测试,再编写代码。
单元测试向开发人员表明代码正确执行操作;而功能测试向开发人员表明代码执行正确的操作。
单元测试是从程序员的角度编写的。它确保类的某个特定方法成功执行一系列特定的任务。每个测试都确保只要给定输入,方法将输出预期的结果。
功能测试是从用户的角度编写的。这种测试确保系统执行用户期望它执行的工作
就像单元测试一样,如果没有测试框架,编写一套可维护的自动化功能测试实际上是不可能的。JUnit 非常适合编写单元测试;但是,当试图编写功能测试时,它就显得力不从心了。就功能测试而言,没有与 JUnit 相当的框架。也有几种用于功能测试的产品,但我从来没见过它们应用于生产环境。如果找不到满足您的需要的框架,您就必须创建一个。
3.Django中的单元测试
简单测试例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from django.test import TestCase from myapp.models import Animal class AnimalTestCase(TestCase): def setUp(self): Animal.objects.create(name="lion", sound="roar") Animal.objects.create(name="cat", sound="meow") def test_animals_can_speak(self): """Animals that can speak are correctly identified""" lion = Animal.objects.get(name="lion") cat = Animal.objects.get(name="cat") self.assertEqual(lion.speak(), 'The lion says "roar"') self.assertEqual(cat.speak(), 'The cat says "meow"') |
这个例子是测试myapp.models 中的 Animal 类相关的方法功能。
用代码访问网址的方法:
1 2 3 4 5 6 7 8 | >>> from django.test import Client >>> c = Client() >>> response = c.post('/login/', {'username': 'john', 'password': 'smith'}) >>> response.status_code 200 >>> response = c.get('/customer/details/') >>> response.content '<!DOCTYPE html...' |
我们可以用 django.test.Client 的实例来实现 get 或 post 内容,检查一个网址返回的网页源代码
总结命令和概念:
启动Django的开发服务器
>>> python manage.py runserver
运行功能测试
>>> python functional_tests.py
运行单元测试
>>> python manage.py test