0

我为我的项目创建了一些单元测试。

我有几个班级都有自己的单元。但是很多测试用例在原理上是相似的:

  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

它有效,但也许您知道更聪明的解决方案。例如控制期望或使用不同的参数。

4

1 回答 1

0

问题不在于测试的低效工厂方法;问题是你的底层测试范式。单元测试应该检查某些对象或方法的行为,而不是对象组合。

根据您发布的示例,我认为您应该检查 add 和 get 方法的边界条件,而不是关注给定数据结构中是否存在某些值。记住:行为,而不是组成。

测试在某种程度上更像是一门艺术而不是一门科学。YMMV。

于 2012-06-13T15:12:39.553 回答