2014-06-18 19 views
0

我有這段代碼,這是一個類__init__方法,並採用兩個參數。單元測試複雜`__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

使用模擬request,可以給你確定性的數據,而無需連接到互聯網。例如,使request對象返回一些固定字符串request.METAsession對象,它返回session.get(...)等的固定字符串。然後斷言self.active_lang和其他需要設置的屬性具有正確的值。

+0

謝謝。我正在使用'來自模擬導入模擬'來模擬請求。 – feroz