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