一直都有聽到 TDD 測試驅動開發的開發方式,以前看了一本 《Python Web開發測試驅動方法》,這本書基於 Django 框架嚴格遵循測試驅動開發(TDD)的方式去實現一個簡單網站。一直都很想嘗試這種方式進行一次簡單的TDD實踐,這篇文章就使用我以前的 仿V2EX 網站項目來一步步實踐。python
測試驅動開發(Test-driven development)簡稱 TDD,是一種軟件開發過程當中的應用方法,,由極限編程中倡導,以其倡導先寫測試程序,而後編碼實現其功能得名。git
測試驅動開發是戴兩頂帽子思考的開發方式:先戴上實現功能的帽子,在測試的輔助下,快速實現其功能;再戴上重構的帽子,在測試的保護下,經過去除冗餘的代碼,提升代碼質量。測試驅動着整個開發過程:首先,驅動代碼的設計和功能的實現;其後,驅動代碼的再設計和重構。以上概念來源於維基百科github
相信各位讀者都已經知道 V2EX 社區,首先一個技術社區須要有如下幾個功能:shell
以上幾個功能對一個技術社區來講是十分重要的,本文是要使用 TDD 方式實現這樣一個社區,所以在這裏介紹一下編程
首先測試驅動開發的第一步就是:編寫測試。上一節已經提到了一些需求,這裏就根據這些需求寫一個簡單的測試,並設法讓其經過。首先是用戶功能,一個用戶須要有註冊、驗證、登陸等步驟後才能真正在社區中發佈話題等功能。flask
本文使用 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 來安裝pipenvui
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 開發實現爲主了。