Python 为类编写单元测试';s_u_初始方法
我对单元测试和编写/使用异常非常陌生。我目前正在努力学习最佳实践,并将其整合到我的项目中。作为对我读到的一些东西的测试,我写了一个简单的合同模块。下面是contract类的init,它有几个相互依赖的参数 如何/应该基于init方法的参数依赖性为其编写测试 提前谢谢Python 为类编写单元测试';s_u_初始方法,python,unit-testing,nose,Python,Unit Testing,Nose,我对单元测试和编写/使用异常非常陌生。我目前正在努力学习最佳实践,并将其整合到我的项目中。作为对我读到的一些东西的测试,我写了一个简单的合同模块。下面是contract类的init,它有几个相互依赖的参数 如何/应该基于init方法的参数依赖性为其编写测试 提前谢谢 def __init__(self, code, description ,contract_type, start_date ,end_date ,reminder_date,
def __init__(self, code, description ,contract_type,
start_date ,end_date ,reminder_date,
customer=None, isgroup=False, vendor=None,
discount_perc=None):
contract_types = ['item','vendor']
self.code = code
self.description = description
self.contract_type = contract_type
self.start_date = start_date
self.end_date = end_date
self.reminder_date = reminder_date
if contract_type not in contract_types:
raise AttributeError("Valid contract types are 'item' & 'vendor'")
if isgroup:
if customer:
raise AttributeError("Group contracts should not have 'customer' passed in")
self.is_group_contract = True
else:
if customer:
self.add_customer(customer)
else:
raise AttributeError('Customer required for non group contracts.')
if contract_type == 'vendor':
if vendor and discount_perc:
self.vendor = vendor
self.discount_perc = discount_perc
else:
if not vendor:
raise AttributeError('Vendor contracts require vendor to be passed in')
if not discount_perc:
raise AttributeError('Vendor contracts require discount_perc(Decimal)')
如果这种类型的问题不适合这样做,我最好去哪里?我会将
\uuuuu init\uuuuu
与任何其他(非类或静态)方法类似——基于各种输入组合测试预期输出。但除此之外,我还将测试它是否返回(或不返回,取决于您的需求)singleton对象。然而,人们可能更喜欢将单例测试提取为与
\uuuuuuuuuuuuuuuuuuuuuuu
相关的测试用例
最终,您将进行以下方面的测试:
另一个技巧:将
contract\u types=['item','vendor']
提取到class属性将有助于业务逻辑测试的组织。IIRC,programmers.stackexchange.com更适合于代码审查/重构问题。也就是说,一个想法是简单地减少出错的方式。不要使用单独的customer
和isgroup
参数,而是为customer
使用一个特殊的GROUP
值来表示集团合同。您的前两个问题更适合CodeReview,但我认为第三个问题(测试)适合这样做。也许你应该把问题一分为二。@joaquin谢谢你的建议。我已经根据你的建议修改了这个问题。@joaquin,有一个测试相关问题的方法。