【Python基礎】lpthw - Exercise 47 自動化測試

  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項目彷佛已經再也不更新?)

相關文章
相關標籤/搜索