跳到主要內容

筆記:TDD三原則

所謂的測試導向開發的三原則
http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd
  1. You are not allowed to write any production code unless it is to make a failing unit test pass.
  2. You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures.
  3. You are not allowed to write any more production code than is sufficient to pass the one failing unit test.
翻譯成白話一點的中文就是
  1. 沒有測試單元,不寫程式。
  2. 不寫測試條件以外的測試程式。
  3. 不寫不屬於任何測試單元的產品程式。

留言

這個網誌中的熱門文章

Windows Installer死掉了嗎?

最近我的電腦發生了奇怪的事情。只要是與Windows Installer有關的東西,都無法動作了。也就是說,我無法安裝包裝成msi的軟體。也無法加以移除。搞了半天,始終沒有頭緒。一度動念頭想要將整台電腦重灌。 不過,經過一路追蹤問題,我發現是Windows Installer的服務無法啟動,而造成整個問題。透過系統管理工具中的『服務』,去啟動Windows Installer服務時,每次都看到代碼1067的錯誤訊息。無論怎麼重灌Windows Installer也無法解決。 今天突然靈光一閃,我開始把正在執行的程式一個接著一個砍掉,一邊砍一邊去啟動Windows Installer服務。試了好久,都快要放棄的時候。忽然我的Windows Installer就run起來了。趕快看一下是砍了哪個程式變成這樣的。終於被我找到罪魁禍首了!!就是下面這個程式造成的。只要把這個服務停掉,我的Windows Installer就復活了!!! 感謝匿名網友提供另外一個小技巧: 『只要在windows installer服務的內容裡,在登入那頁勾" 允許服務與桌面互動 " 就輕鬆解決囉!』 BTW, 我沒實際試過,有遇到這個問題的人,請試試看!然後好心的跟我回報一下! 有些網友找不到service的控制畫面。下面簡單說明一下: service的控制是在 『控制台->系統管理工具->服務』 英文的話是 『Control Panel->Administrative Tools->Services』 再不然,用command line下services.msc /s也可以叫出來。 再不行...就試試吧 > net stop LVPrcSrv > %WINDIR%\system32\sc.exe config LVPrcSrv start= disabled PS: 如果需要重新安裝MSI installer,可以到Microsoft的 下載中心 。

Portable Python

我常常需要把Python寫的script帶到其他電腦使用,因此,一個免安裝,可攜帶的Python就顯得十分重要。最近看過了幾個可攜式Python的方案,下面這個PortablePython是我覺得最合我意的方案。因為它提供了大部分會用到的Python module及工具,甚至連wxPython及PyGame也有。同時也有好用的Python編輯器PyScripter。所有開發Python所需的開發工具都一應俱全了!把它放到隨身碟中,就不用到處幫人安裝Python了。 PortablePython : http://www.portablepython.com/

一個Python程式可幫檔名加上日期與時間

很多時候,我們希望能夠將檔案或是目錄名稱加上一個時間及日期,以便release。所以,我就寫了一個小小的程式來達到這個目的。我把這個程式貼上來,讓有興趣的人可以拿去使用。 -- #!/usr/bin/env python # -*- coding: ascii -*- """ Usage: cfgfn.py [filename or directory list] """ import sys import os import time import re import glob ro = re.compile(r'(?P<FN> .*)-[0-9]{8}-[0-9]{4}(?P<EXT> .*)') for fnl in sys.argv[1:]: for fn in glob.glob(fnl): mo = ro.match(fn) if mo: pre = mo.group('FN') ext = mo.group('EXT') else: pre, ext = os.path.splitext(fn) newFn = pre + time.strftime('-%Y%m%d-%H%M') + ext os.rename(fn, newFn) print 'Rename %s -> %s' % (fn, newFn)