1、自動化測試的目的函數
利用自動化的測試代碼取代手動測試,使得程序中的一些初級bug能夠被自動檢出,而無需人工進行重複繁瑣的測試工做。單元測試
2、編寫測試用例測試
利用上一節編寫的skeleton,此次在projects中建立一個ex47文件夾,將骨架文件複製到ex47下,而後執行如下操做:spa
1. 將全部帶NAME的東西所有重命名爲ex47命令行
2. 將所用文件中的NAME所有改成ex47code
3. 刪除全部的.pyc文件,確保清理乾淨(該類文件爲編譯結果?)對象
注意,書中提示能夠經過執行nosetests命令來運行測試,但此步須要cd到tests的上級目錄,而後直接在命令行鍵入nosetests運行。blog
下面在bin同級的ex47文件夾下建立一個game.py,並寫一些類做爲測試對象,如ip
1 class Room(object): 2 3 def __init__(self, name, description): 4 self.name = name 5 self.description = description 6 self.paths = {} 7 8 def go(self, direction): 9 return self.paths.get(direction, None) #dict.get(key, default=None) 查找鍵,指定鍵不存在時,返回default值 10 11 def add_paths(self, paths): 12 self.paths.update(paths) #dict.update(dict2) 將dict2裏的鍵值對更新到dict裏
下面將單元測試骨架修改爲下面的樣子:get
1 from nose.tools import * 2 from ex47.game import Room 3 4 def test_room(): 5 gold = Room('GoldRoom', 6 """This room has gold in it you can grab. There's a 7 door to it in the north.""") 8 assert_equal(gold.name, "GoldRoom") 9 assert_equal(gold.paths, {}) 10 11 def test_room_paths(): 12 center = Room('Center', "Test room in the center.") 13 north = Room('North', "Test room in the north.") 14 south = Room('South', "Test room in the south.") 15 16 center.add_paths({'north':north, 'south':south}) 17 assert_equal(center.go('north'), north) 18 assert_equal(center.go('south'), south)
還能夠根據模塊的功能增長更多的測試用例(上面以test開頭的函數,稱爲test case),用assert_equal斷言來判斷實際輸出值和理想輸出值是否一致。
3、測試指南
1. 測試文件要放在tests/目錄下,而且命名爲name_tests.py,不然nosetests就沒法識別。這樣也能夠防止測試代碼和別的代碼相互混淆。
2. 爲建立的每個模塊寫一個測試文件。
3. 測試用例保持簡短。
4. 保持測試用例的整潔,用輔助函數代替重複代碼。
4、其餘建議
瞭解doc tests,這是一種另外的測試方式。(nose項目彷佛已經再也不更新?)