摘要:測試驅動開發簡稱,是一種軟件開發過程中的應用方法,,由極限編程中倡導,以其倡導先寫測試程序,然后編碼實現其功能得名。測試驅動著整個開發過程首先,驅動代碼的設計和功能的實現其后,驅動代碼的再設計和重構。
前言
一直都有聽到 TDD 測試驅動開發的開發方式,之前看了一本 《Python Web開發測試驅動方法》,這本書基于 Django 框架嚴格遵循測試驅動開發(TDD)的方式去實現一個簡單網站。一直都很想嘗試這種方式進行一次簡單的TDD實踐,這篇文章就使用我之前的 仿V2EX 網站項目來一步步實踐。
TDD測試驅動開發(Test-driven development)簡稱 TDD,是一種軟件開發過程中的應用方法,,由極限編程中倡導,以其倡導先寫測試程序,然后編碼實現其功能得名。
測試驅動開發是戴兩頂帽子思考的開發方式:先戴上實現功能的帽子,在測試的輔助下,快速實現其功能;再戴上重構的帽子,在測試的保護下,通過去除冗余的代碼,提高代碼質量。測試驅動著整個開發過程:首先,驅動代碼的設計和功能的實現;其后,驅動代碼的再設計和重構。以上概念來源于維基百科
需求分析相信各位讀者都已經知道 V2EX 社區,首先一個技術社區需要有以下幾個功能:
話題:發布話題、修改話題、追加話題等
節點:話題的歸類
用戶:標識你在社區的身份
評論:評論話題,技術社區最主要的功能
用戶關系:用戶之間能相互關注
以上幾個功能對一個技術社區來說是十分重要的,本文是要使用 TDD 方式實現這樣一個社區,因此在這里介紹一下
編寫測試首先測試驅動開發的第一步就是:編寫測試。上一節已經提到了一些需求,這里就根據這些需求寫一個簡單的測試,并設法讓其通過。首先是用戶功能,一個用戶需要有注冊、驗證、登錄等步驟后才能真正在社區中發布話題等功能。
本文使用 GitHub 來托管項目代碼,這里新建一個項目名稱叫 v2ex, 初始結構如下:
v2ex ├── LICENSE └── README.md
然后新建一個 tests 文件夾,用于保存測試代碼,為什么要建 tests 文件夾,而不是在根路徑下建個測試文件就好了,這不是良好的項目結構,本文根據項目最佳結構來實踐。然后在tests 文件夾下新建測試文件test_user.py, 下面是項目的當前結構:
v2ex ├── LICENSE ├── README.md └── tests └── test_user.py 1 directory, 3 files
項目已經存在了,先別著急編寫測試代碼,先把開發環境搭建起來,下一節介紹如何搭建一個完美的 Python 開發環境。
虛擬環境本文基于 python3.7 版本,使用 pipenv 來管理開發環境,可能有些人沒有使用過 pipenv。這東西對于管理虛擬環境而言太好用了,具體使用可參照官網或者 使用pipenv管理你的項目 這篇文章來使用。
本文假設你已經存在了 Python3.7 環境了,然后可以通過pip 來安裝pipenv
pip install pipenv -i https://pypi.tuna.tsinghua.edu.cn/simple(如果配了就不要-i后面的)
如果不了解 pipenv,可以通過下面來參考相關命令:
$ pipenv -h ........(省略) Usage Examples: Create a new project using Python 3.6, specifically: $ pipenv --python 3.6 Install all dependencies for a project (including dev): $ pipenv install --dev Create a lockfile containing pre-releases: $ pipenv lock --pre Show a graph of your installed dependencies: $ pipenv graph Check your installed dependencies for security vulnerabilities: $ pipenv check Install a local setup.py into your virtual environment/Pipfile: $ pipenv install -e . Use a lower-level pip command: $ pipenv run pip freeze
安裝后 pipenv 后,在 v2ex 根路徑下創建虛擬環境,即是通過
$ pipenv --python 3.7
執行完這條命令后,就默認幫你創建好一個Python虛擬環境了,然后可以通過
$ pipenv shell 進入虛擬環境中
仔細觀察 v2ex 根路徑多了個 Pipfile 文件,該文件其實和以前的 requirements.txt 文件一樣保存項目的各種依賴庫的信息, 這個Pipfile 文件結構如下:
[[source]] url = "https://pypi.tuna.tsinghua.edu.cn/simple" # 修改成國內源 verify_ssl = true name = "pypi" [packages] [dev-packages] [requires] python_version = "3.7"
so,因為使用的是 Flask 框架,那就先安裝一下 Flask 吧,使用以下命令安裝,注意不是使用 pip 安裝了
$ pipenv install flask 如果安裝過程出現TypeError: "module" object is not callable 錯誤 你需要 $ pipenv run pip install pip==18.0 $ pipenv install
最簡單的 Flask 環境已經搭建好了,可以使用 git 進行一次提交了,本文會基于 git 來分階段提交代碼,不了解 git 的同學要自己反省一下了。
下面看看當前項目的文件結構
v2ex ├── LICENSE ├── Pipfile ├── Pipfile.lock ├── README.md └── tests └── test_user.py
然后使用Git提交至遠程倉庫
在 v2ex 的根路徑下 $ git add . $ git commit -m "add tests and pipfile" $ git push origin master總結
本文主要介紹了使用 TDD 方式實現一個技術社區,并初步介紹了 TDD 的概念,然后構建了項目的測試結構,介紹了社區的相關需求,后續會根據需求來開發,最后搭建了一個Python 開發環境來隔離本地環境。本文主要兼顧各層次的讀者,所以就介紹了一些最基本的東西,后續主要以 TDD 開發實現為主了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42632.html
摘要:當功能越來越復雜的時候,你可能修改了一些東西,導致另外一個功能的不可用,而單元測試也能保證了原有功能被破壞后能被檢測出來。 showImg(https://segmentfault.com/img/remote/1460000017081749); 前言 前一篇講到了 TDD 測試驅動開發的相關概念和環境搭建,這篇就著手開始用TDD方式開發了。首先這篇需要編寫用戶相關的API接口,如...
摘要:目前就職于,他在各種演講研討會和開發者大會上積極推廣測試驅動開發。問很多敏捷教練都表示訓練新人做測試驅動開發是一件辛苦而進度緩慢的事,并且收益也不是很大。首先是開發的對話式風格。第一個問題就是測試套件的速度。 Harry J.W. Percival目前就職于PythonAnywhere,他在各種演講、研討會和開發者大會上積極推廣測試驅動開發(TDD)。他在利物浦大學獲得計算機科學碩士學...
摘要:目前就職于,他在各種演講研討會和開發者大會上積極推廣測試驅動開發。問很多敏捷教練都表示訓練新人做測試驅動開發是一件辛苦而進度緩慢的事,并且收益也不是很大。首先是開發的對話式風格。第一個問題就是測試套件的速度。 Harry J.W. Percival目前就職于PythonAnywhere,他在各種演講、研討會和開發者大會上積極推廣測試驅動開發(TDD)。他在利物浦大學獲得計算機科學碩士學...
摘要:作為網站的基礎框架,于年月日發布,目前已經獲得了很多社區的支持,并且在一系列不同的場景種得到應用。使用該框架,開發者能夠快速開發出即安全又強大的用戶身份認證機制,例如機制用戶身份認證防止跨站攻擊等等。 下一篇文章:Python:Tornado 第一章:異步及協程基礎:第一節:同步與異步I/O Tornado是一個可擴展的非阻塞Web服務器以及相關工具的總稱。Tornado每秒可以處理...
摘要:現在有了之后,部署方式變了更加容易,不容易出現配置錯誤,環境不一致問題。實際應用中,經常遇到多個容器相配合運行一套應用程序的情況。所以想要將應用運行在容器中,該容器必須將該應用所有的環境依賴安裝好。 showImg(https://segmentfault.com/img/remote/1460000017081815); 背景 ??以前部署應用,需要各種環境配置,各種shell操作...
閱讀 3117·2021-11-23 09:51
閱讀 1981·2021-09-09 09:32
閱讀 1090·2019-08-30 15:53
閱讀 2964·2019-08-30 11:19
閱讀 2473·2019-08-29 14:15
閱讀 1440·2019-08-29 13:52
閱讀 558·2019-08-29 12:46
閱讀 2824·2019-08-26 12:18