来自 电脑系统 2019-11-08 04:22 的文章
当前位置: 金沙澳门官网网址 > 电脑系统 > 正文

【金沙澳门官网网址】教师的天资教学博客目录

 bootstrap cdn在线地址

对Python的Django框架中的项目进展单元测量检验的措施,pythondjango

 Python中的单元测验

大家先来回看一下Python中的单元测验方法。
下边是三个 Python的单元测验轻易的例子:

假如我们付出三个除法的效劳,有的同学恐怕觉得极粗略,代码是如此的:

def division_funtion(x, y):
  return x / y

不过那样写毕竟对还是不对吗,有个别同学能够在代码上边那样测量检验:

def division_funtion(x, y):
  return x / y


if __name__ == '__main__':
  print division_funtion(2, 1)
  print division_funtion(2, 4)
  print division_funtion(8, 3)

也就那样运维后获取的结果,本身每回都得算一下去查处三遍,特不低价,Python中有 unittest 模块,能够很有益于地展开测验,详细情形能够随笔最后的链接,看官方网站文书档案的事必躬亲介绍。

下边是二个简约的演示:

import unittest


def division_funtion(x, y):
  return x / y


class TestDivision(unittest.TestCase):
  def test_int(self):
    self.assertEqual(division_funtion(9, 3), 3)

  def test_int2(self):
    self.assertEqual(division_funtion(9, 4), 2.25)

  def test_float(self):
    self.assertEqual(division_funtion(4.2, 3), 1.4)


if __name__ == '__main__':
  unittest.main()

本身轻松地写了八个测验示例(不必然周到,只是示范,比方未有设想除数是0的情事卡塔尔,运转后意识:

F.F
======================================================================
FAIL: test_float (__main__.TestDivision)
----------------------------------------------------------------------
Traceback (most recent call last):
 File "/Users/tu/YunPan/mydivision.py", line 16, in test_float
  self.assertEqual(division_funtion(4.2, 3), 1.4)
AssertionError: 1.4000000000000001 != 1.4

======================================================================
FAIL: test_int2 (__main__.TestDivision)
----------------------------------------------------------------------
Traceback (most recent call last):
 File "/Users/tu/YunPan/1.py", line 13, in test_int2
  self.assertEqual(division_funtion(9, 4), 2.25)
AssertionError: 2 != 2.25

----------------------------------------------------------------------
Ran 3 tests in 0.001s

FAILED (failures=2)

汗!开采了没,竟然多少个都未果了,测量检验开掘:

4.2除以3 拾分 1.4000000000000001 不对等期待值 1.4

9除以4等于2,不等于期待的 2.25

上面大家正是要修复那一个标题,再次运营测验,直到运维不报错为止。

比如说依照实际境况,假如大家只必要保留到小数点后6位,能够这么改:

def division_funtion(x, y):
  return round(float(x) / y, 6)

重复运维就不报错了:

...
----------------------------------------------------------------------
Ran 3 tests in 0.000s

 
OK

Django中的单元测量检验

赶紧举行单元测验(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

from django.test import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)

您能够有二种方法运营单元测量检验:

  • 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代码如下:

class ProductTest < ActiveSupport::TestCase
test "product attributes must not be empty"do
product = Product.new
assert product.invalid?
assert product.errors[:title].any?
assert product.errors[:description].any?
assert product.errors[:price].any?
assert product.errors[:image_url].any?
end
test "product price must be positive"do
product = Product.new(:title => "My Book Title",
:description => "yyy",
:image_url => "zzz.jpg")
product.price = -1
assert product.invalid?
assert_equal "must be greater than or equal to 0.01",
product.errors[:price].join('; ')
product.price = 0
assert product.invalid?
assert_equal "must be greater than or equal to 0.01",
product.errors[:price].join('; ')
product.price = 1
assert product.valid?
end
def new_product(image_url)
Product.new(:title => "My Book Title",
:description => "yyy",
:price => 1,
:image_url => image_url)
end
test "image url"do
ok = %w{ fred.gif fred.jpg fred.png FRED.JPG FRED.Jpg
http://a.b.c/x/y/z/fred.gif }
bad = %w{ fred.doc fred.gif/more fred.gif.more }
ok.eachdo |name|
assert new_product(name).valid?, "#{name} shouldn't be invalid"
end
bad.eachdo |name|
assert new_product(name).invalid?, "#{name} shouldn't be valid"
end
end
test "product is not valid without a unique title"do
product = Product.new(:title => products(:ruby).title,
:description => "yyy",
:price => 1,
:image_url => "fred.gif")
assert !product.save
assert_equal "has already been taken", product.errors[:title].join('; ')
end
test "product is not valid without a unique title - i18n"do
product = Product.new(:title => products(:ruby).title,
:description => "yyy",
:price => 1,
:image_url => "fred.gif")
assert !product.save
assert_equal I18n.translate('activerecord.errors.messages.taken'),
product.errors[:title].join('; ')
end
end

对Product测量试验的源委包括:

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

  1. price必得超越零;

  2. image_url必得以jpg,png,jpg结尾,而且对大小写不灵动;

  3. titile必需唯生龙活虎;

让我们在Django中举办这么些测验。由于ProductForm包括了模型校验和表单校验准则,使用ProductForm能够超轻便的贯彻上述测量检验:

depot/depotapp/tests.py

#/usr/bin/python
#coding: utf8
"""
This file demonstrates writing tests using the unittest module. These will pass
when you run "manage.py test".
Replace this with more appropriate tests for your application.
"""
from django.test import TestCase
from forms import ProductForm
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)
class ProductTest(TestCase):
def setUp(self):
self.product = {
'title':'My Book Title',
'description':'yyy',
'image_url':'http://google.com/logo.png',
'price':1
}
f = ProductForm(self.product)
f.save()
self.product['title'] = 'My Another Book Title'
#### title,description,price,image_url不能为空
def test_attrs_cannot_empty(self):
f = ProductForm({})
self.assertFalse(f.is_valid())
self.assertTrue(f['title'].errors)
self.assertTrue(f['description'].errors)
self.assertTrue(f['price'].errors)
self.assertTrue(f['image_url'].errors)
####  price必须大于零
def test_price_positive(self):
f = ProductForm(self.product)
self.assertTrue(f.is_valid())
self.product['price'] = 0
f = ProductForm(self.product)
self.assertFalse(f.is_valid())
self.product['price'] = -1
f = ProductForm(self.product)
self.assertFalse(f.is_valid())
self.product['price'] = 1
####  image_url必须以jpg,png,jpg结尾,并且对大小写不敏感;
def test_imgae_url_endwiths(self):
url_base = 'http://google.com/'
oks = ('fred.gif', 'fred.jpg', 'fred.png', 'FRED.JPG', 'FRED.Jpg')
bads = ('fred.doc', 'fred.gif/more', 'fred.gif.more')
for endwith in oks:
self.product['image_url'] = url_base+endwith
f = ProductForm(self.product)
self.assertTrue(f.is_valid(),msg='error when image_url endwith '+endwith)
for endwith in bads:
self.product['image_url'] = url_base+endwith
f = ProductForm(self.product)
self.assertFalse(f.is_valid(),msg='error when image_url endwith '+endwith)
self.product['image_url'] = 'http://google.com/logo.png'
###  titile必须唯一
def test_title_unique(self):
self.product['title'] = 'My Book Title'
f = ProductForm(self.product)
self.assertFalse(f.is_valid())
self.product['title'] = 'My Another Book Title'

下一场运营 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的连锁部分如下:

def clean_image_url(self):
url = self.cleaned_data['image_url']
ifnot endsWith(url.lower(), '.jpg', '.png', '.gif'):
raise forms.ValidationError('图片格式必须为jpg、png或gif')
return url

然后再运转测量试验:

$ 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。

 

你大概感兴趣的稿子:

  • 应用Python的Django框架结合jQuery达成AJAX购物车页面
  • Python的Django REST框架中的连串化及要求和再次回到
  • 详细解释Python的Django框架中的templates设置
  • Python使用django获取用户IP地址的点子
  • 解析Python的Django框架的运行方式及管理流程
  • Django1.7+python 2.78+pycharm配置mysql数据库教程
  • python常用web框架简单品质测量试验结果分享(包罗django、flask、bottle、tornado)
  • python django集成cas验证系统
  • 教您什么样将 Sublime 3 营形成 Python/Django IDE开垦利器
  • 详整Python的Django框架中manage命令的选用与强盛

Python中的单元测量检验 我们先来回想一下Python中的单元测量试验方法。 上面是贰个Py...

http://www.xuliangwei.com/ http://www.nnzhp.cn

  cmdb

    cmdb

    cmdb

  1.     第一篇:初识Python

  2.   其次篇:python基本功之大旨风格

  3.   其三篇:python基本功之数据类型与变量

  4.   第四篇:python功底之标准和巡回

  5. 第五篇:python底蕴之字符编码

  6. py编码终极版  苑昊先生

   Py西游攻关之函数    苑昊先生

   Py西游攻关之装饰器  苑昊先生

   Py西游攻关之IOmodel 苑昊先生

  1.   第六篇:python底工之文件管理

  2.   第七篇 python根基之函数,递归,内置函数

  3.   第八篇 迭代器公约和生成器

  4.   第九篇 装饰器

  5. 第十篇 面向对象的前后相继设计

  6.   第十意气风发篇 面向对象进级

  7.   第十七篇 分外管理

  8.   第十二篇 python幼功之socket编制程序

  9.   常用模块

  10.   模块与包

  11.   进度与线程

17_1    进程与线程理论功底

17_2    Cpython解释器扶持的长河与线程

  1.   函数草稿

金沙澳门官网网址 ,18_1     selenium模块

  1.   常用模块

  2.   Py西游攻关之模块

  3.    四线程与多进度

  4.   Py西游攻关之RabbitMQ、Memcache、Redis

  5.   前端功底之html

  6.     前端功底之CSS

  7.     JavaScript 功底学习1

  8.     前面四个学习之jquery

26_1.       Django-ajax

   jQuery

       jQuery网址

  1.       Python开荒【第十四篇】:MySQL(生机勃勃卡塔 尔(英语:State of Qatar)

  2.       Python开采【第十四篇】:MySQL(二卡塔 尔(英语:State of Qatar)

  3.       Python开垦【第十七篇】:Python操作MySQL

       目录补充

  1.     数据库根底

  2.     数据库进级

  3.         MySQL练习题

  4.                 MySQL演习题参照他事他说加以考察答案

  5.        Python之路【第十一篇】:Django【底工篇】

  6.        Python之路【第十九篇】:Django【进级篇 】

35_1.     Django之Model操作

35-2   s10期Tornao分享

35-3      Django知识点收拾

本文由金沙澳门官网网址发布于电脑系统,转载请注明出处:【金沙澳门官网网址】教师的天资教学博客目录

关键词: