2012-06-13 91 views
0

我爲我的項目創建了一些unittests。尋找testfunction模式

我用自己的單位有幾個班。 但許多測試用例在原理類似:

  1. 添加的東西
  2. 得到補充元素
  3. 檢查這個

例如:

Player.add_weapon("name") 
Player.get_weapons() 
for w in weapons: 
- check the validity bla bla 

Warehouse.add_package("name") 
Warehouse.get_packages() 
for p in packages: 
- check the validity bla bla 

你看,上下文是不同的,但程序相同。 這是我的想法:(但也許它存在於這個處理的良好格局)

def mytestfunction(ut_instance, test_obj, add_method_as_string, getlist_method_as_string): 
    add_obj = None 
    get_obj_list = None  
    exec("add_obj=test_obj.%s" % add_method_as_string)   
    exec("get_obj_list=test_obj.%s" % getlist_method_as_string) 

    ut_instance.assertEqal(len(get_obj_list()), 0, msg="We need a empty test object") 
    item = add_obj("lala") 
    list = get_obj_list() 

    #check this ..and so on ... 
    .... 
    pass 

它的工作原理,但也許你知道一個更聰明的解決方案。例如控制期望值或使用不同的參數。

回答

0

這個問題不是測試效率低下的工廠方法;問題是你的潛在測試範例。單元測試應該檢查某個對象或方法的行爲,而不是對象組成。

根據您發佈的樣本,我認爲您應該檢查您的添加和獲取方法的邊界條件,而不是關注特定數據結構中是否存在某些值。記住:行爲,而不是組成。

測試更多地是一門藝術而不是科學。因人而異。