Я очень новичок в тестировании и написании/использовании исключений. В настоящее время я прилагаю огромные усилия, чтобы узнать о лучших практиках и интегрировать их в свои проекты. В качестве теста некоторых вещей, которые я читал, я написал простой контрактный модуль. Ниже приведена инициатива класса контракта, которая имеет несколько аргументов, которые зависят друг от друга.Написание единиц измерения для метода __init__ класса
Как мне написать/должен ли я написать тест для метода init на основе его зависимостей аргументов.
Заранее благодарен!
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)')
Если этот вопрос не подходит для SO, где я могу быть лучше?
IIRC, programmers.stackexchange.com лучше подходит для рассмотрения кода/рефакторинга. –
Тем не менее, одна идея состоит в том, чтобы просто уменьшить количество способов, с помощью которых все может пойти не так. Вместо того, чтобы иметь отдельные параметры 'customer' и' isgroup', используйте специальное значение 'GROUP' для' customer' для указания групповых контрактов. –
ваши два первых вопроса лучше подходят для CodeReview, но третий (тестирование), я думаю, подходит для SO. Может быть, вы должны разделить свой вопрос на две части. – joaquin