一個新腳法式員為老代碼寫測試法式的心得

  

  我保持往健身房錘煉身材,演習舉重,我愛好這類讓本身變得更強健、更康健的感到。年夜約兩個月前,我的膝蓋開端感到抽痛,但我仍舊頑強往錘煉。

  我同心專心念讓本身更強健,完整疏忽瞭腿上的康健題目,仍舊強制本身持續舉重。您能夠設想出,膝蓋上的痛出有好轉,每次粗疲力盡的錘煉後我皆須要更少時光的規復。

  做為一個正在 Rackspace 公司的低級法式員(正在Airbrake 開辟組),我常常會有一種類似的感到,它督促我一直的年夜量產出代碼,認為如許能讓產物更強健。當正如我的膝蓋每次鄙人蹲時皆要忍耐苦楚一樣,已經測試的老的功效特點正在年夜量湧現的新功效的重壓下開端變形,開端斷裂。

  終極我的理療師壓服我應當重面做病愈錘煉,規復前沒有要再往舉重。他道,當膝蓋上的題目好瞭以後,肌肉變得更壯實有力後,我的提高會更快,也更沒有輕易弄傷本身,讓本身苦楚。

  銘刻瞭那些忠言,我看到瞭它戰事情之間的接洽。我強制本身往給老代碼、老功效寫測試代碼,如許使得我的開辟進度更快,對代碼更有信念,沒有再擔憂開辟新代碼時會損壞老代碼的功效。

  上面是我正在那個改變進程中教到的癥結幾面:

  開辟對象很主要

  我應用 RSpec, Capybara, FactoryGirl 戰 Selenium 去測試我的 Rails 運用。正在寫測試代碼之前,您要先研討一下那些對象。不然,調試那些測試代碼糟蹋您年夜量的時光。

  一些簡略的義務,比方正在測試前戰測試後消除數據庫,它們對包管您能準確的、快速的、可反復的測試起側重要感化。對付那些義務,您可使用那個 database_cleaner gem。

  假如您是團隊中第一個去寫測試代碼的人,那個時刻測試對象的挑選特別主要,它會影響團隊其他成員對測試的接收。全部團隊皆要提交測試法式,以是您要讓那個進程盡量的簡略,——采取壯大、靈巧的對象。

  現有的代碼隻是告知您如今做成瞭甚麼樣,但沒有是告知您代碼現實應當是如許。

  當開端測試他人的代碼時,我發明有個風俗,起首假定那些代碼是準確的,相符請求的,以是那些代碼中可以或許經由過程測試用例。偶然如許是出題目的,但偶然那些代碼之以是經由過程測試隻是由於測試代碼是依照它們寫的。

  您不由得會圖費事,會假定全部的那些代碼是最新的,相符請求的,然後寫的測試去證明那些假定。那便致使瞭一種反背的測試驅動開辟形式:代碼成瞭測試的根據戰尺度。

  平安的做法是尋找代碼最後的志願,資深的法式員更愛好寫出很瞭瞭的代碼,您能經由過程代碼看出它試圖真現的功效。

  完整測試是弗成能的,沒有要如許請求本身

  為全部項目寫測試法式,您大概須要將它看成一種齊職事情去看待。固然,我們皆願望 100%(+)的測試籠罩率,便像我們皆願望洗滌盆裡出有凈盤子。但是,別的一種辦法是當您須要盤子時洗濯所需的盤子。我們用這類計謀為新代碼寫測試法式,老代碼中我們開辟的進程中碰到時再寫測試法式。

  我發起新法式員應當往為老法式寫測試,如許它能強制您進修老代碼庫,讓您得到更深的肌肉影象力。但必定要遵守上裡的那些本則。

  英文本文:What I Learned as a Junior Developer Writing Tests for Legacy Code