日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django-TDD

發布時間:2025/3/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django-TDD 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、什么是TDD:

  測試驅動開發(Test-Driven Development) 它的總體思想是在寫“實現”之前先寫針對實現的“測試”,由于編寫測試的時候

  你要思考很多的可能性能,更多的思考也就意味著在寫“實現”之前你已經對問題有了一個相對深入的理解,在“實現”完成

  后就可以用之前編寫好測試用例來進行測試了。

?

  好處:1): 事前可以更清楚自己要解決的問題。 2):日后在你修改代碼的時候你憑什么確定你的修改不會有問題呢?你只要運行

  一下你之前的測試用例看一下能不能跑通就行了。

?

  壞處:1):過于理想對程序員要求比較高。2):增大工作量。?

?

2、100%的TDD過于理想:

  個人認為可能先完成功能“實現”,為盡可能多的“實現”編寫測試用例,通過這些可以自動化執行的測試用例來保證代碼的質量。

?

?

3、Django中一個TDD的例子:

  例子中會有一個叫Book的類用來保存“書”的相關信息,它有一個isReccent方法來判斷這本書是不是最近出版本的

  整個django項目的結構大致如下:

./ ├── db.sqlite3 ├── manage.py ├── p2_7_1 │?? ├── __init__.py │?? ├── __pycache__ │?? │?? ├── __init__.cpython-36.pyc │?? │?? ├── settings.cpython-36.pyc │?? │?? └── urls.cpython-36.pyc │?? ├── settings.py │?? ├── urls.py │?? └── wsgi.py └── polls├── __init__.py├── __pycache__│?? ├── __init__.cpython-36.pyc│?? ├── admin.cpython-36.pyc│?? ├── apps.cpython-36.pyc│?? ├── models.cpython-36.pyc│?? └── tests.cpython-36.pyc├── admin.py├── apps.py├── migrations│?? ├── 0001_initial.py│?? ├── 0002_book.py│?? ├── __init__.py│?? └── __pycache__│?? ├── 0001_initial.cpython-36.pyc│?? ├── 0002_book.cpython-36.pyc│?? └── __init__.cpython-36.pyc├── models.py├── tests.py└── views.py

  

  我在models.py 中定義了Book類內容如下

from django.db import models from django.utils.timezone import now import datetime # Create your models here.class Book(models.Model):publication_date=Nonedef __init__(self,publication_date):self.publication_date=publication_datedef isRecent(self):return self.publication_date >= now() - datetime.timedelta(days=100)

  

  tests.py文件中人內容如下

from django.test import TestCase from django.utils.timezone import now import datetime from polls.models import Person # Create your tests here.class BookModelTests(TestCase):def test_isCurrent(self):pub_time = now() + datetime.timedelta(days=30)book = Book(publication_date=pub_time)self.assertIs(book.isRecent(),False)

  也就是說我在BookModelTests中專門為Book的isRecent方法編寫了測試用例,當一個出版時間指定為未來某一時間的情況下用來測試

  Book.isRecent方法是否完美的實現了功能

?

  運行測試用例

python3 manage.py test polls Creating test database for alias 'default'... System check identified no issues (0 silenced). E ====================================================================== ERROR: test_isCurrent (polls.tests.BookModelTests) ---------------------------------------------------------------------- Traceback (most recent call last):File "/Users/jianglexing/Desktop/django_2_learning/p2_7_1/polls/tests.py", line 10, in test_isCurrentbook = Book(publication_date=pub_time)File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/base.py", line 495, in__init__raise TypeError("'%s' is an invalid keyword argument for this function" % kwarg) TypeError: 'publication_date' is an invalid keyword argument for this function---------------------------------------------------------------------- Ran 1 test in 0.002sFAILED (errors=1) Destroying test database for alias 'default'...

  測試用例沒有跑通、也就是說我們發現了一個Book.isRecent方法中的一個邏輯錯誤,一本書的出版時間不應該是未來,

  然而我們的方法對這樣的值沒有免疫。

?

  修正Book.isRecent方法

from django.db import models from django.utils.timezone import now import datetime # Create your models here.class Book(models.Model):publication_date=Nonedef __init__(self,publication_date):self.publication_date=publication_datedef isRecent(self):return now() - datetime.timedelta(days=100) <= self.publication_date <=now()

?

  再次進行測試

python3 manage.py test polls Creating test database for alias 'default'... System check identified no issues (0 silenced). . ---------------------------------------------------------------------- Ran 1 test in 0.001sOK

?

?

?

總結:

  TDD的好處在于測試用例的代碼只要編寫一次、之后業務代碼的變量有沒有引發bug只要跑一個測試用例就行了。

?

?

-----

?

總結

以上是生活随笔為你收集整理的django-TDD的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。