单元测试复杂的`__init__`方法

时间:2014-06-18 07:37:06

标签: python django refactoring

我有一段代码,它是一个类__init__方法,并且有两个参数。

def __init__(self, port_type, request):
        self.log = Log(__name__, True)
        self.request = request
        self.sitecode = port_type.sitecode.upper()
        self.browser_default_lang = self.request.META['HTTP_ACCEPT_LANGUAGE'].split(',')[0]
        self.active_lang = self.request.session.get('lang', self.browser_default_lang.lower())
        self.static_folder = 'static_%s_%s' % (self.sitecode,     self.SITE_TEMPLATES_RESOURCES_SUFFIX)
        self.template_path = os.path.join(settings.MEDIA_ROOT, self.static_folder)
        self.template_path_port_type = '%s_%s' % (self.template_path, self.port_type.hash)
        self.site_media_path = os.path.join(settings.MEDIA_URL, self.static_folder)
        self.site_port_type_media_path = '%s_%s' % (self.site_media_path, self.port_type.hash)
        self.site_config = SiteConfig.objects.get(sitecode=self.sitecode)
        self.site = UmSite.objects.get(code=self.port_type.sitecode)
        self.context = {} 

我觉得很难为此编写单元测试。我应该首先编写测试但不知何故我最终得到了这个并且必须重构并且现在正在编写它们。

1 个答案:

答案 0 :(得分:1)

使用模拟request为您提供确定性数据,而无需连接到互联网。例如,创建一个request对象,返回request.META的某个固定字符串,以及一个session对象,返回session.get(...)的固定字符串,然后断言{{ 1}}和其他需要设置的属性具有正确的值。