先來點題外話:
在現代程式設計開發中,TDD(測試驅動開發)變得越來越流行(PS:DDD(領域驅動開發)也是,但兩者并不沖突,就像面向過程和面向對象)。而作為TDD的根本——單元測試也是越來越重要,單元測試可以測試代碼的正确性,例如以下的C#代碼:
1 public class Helper
2 {
3 public string RemoveHtmlMarkup(string str)
4 {
5 return str;
6 }
7 }
需求是去除字元串中的html标記。當然現在這樣是錯誤的,隻會原樣輸出。
接下來編寫測試代碼。(使用了NUnit)
1 [TestFixture]
2 public class HelperTest
3 {
4 [Test]
5 public void RemoveHtmlMarkupTest([Values("<html></html>")]string str)
6 {
7 var output = new Helper().RemoveHtmlMarkup(str);
8 Assert.False(output.Contains("<html>"));
9 }
10 }
現在肯定是不通過的了。修改原來的代碼,去除掉"<html>"然後再跑測試,過了,html标記不止這麼點(還有title等等),然後測試代碼修改,不通過,修改Helper的代碼。這樣反複進行,TDD就是這樣。
當然這個例子可能并不是很好,将就一下吧。
好了,再繼續就扯題了,回到Python中。
首先,令我想不到的是,Python中有斷言,并且上升到了一等公民——關鍵字的水準。使用的關鍵字是assert。文法很簡單,不像C#中Assert還得點(無論是MSUnit還是NUnit)。
1 var = input('please input 1:')
2 assert var == '1','you must input 1'
assert關鍵字後跟兩個或一個參數。第一個參數是一個布爾值,如果該布爾值為False,則斷言不通過,抛出一個AssertionError的錯誤,第二個參數是錯誤的描述,也可以不碼上,但一般情況下還是碼上吧。
呃,就是這幾行,沒了。Python就是這樣簡潔。