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