2014-09-29 20 views
1

我是一個單元測試新手執行在Django 1.4以下測試使用測試用例和模擬:在父類設置的Django測試用例錯誤

from django.test import TestCase 
from mock import patch 

class BaseRegistrationTestCases(TestCase): 
    def setUp(self, backend): 
     # use these common fields for building mock form data 
     self.form_fields = (
      'form_email', 
      'form_companyname', 
      'form_companytype', 
      'form_region', 
      'form_socialgoals', 
     ) 

     self.route = '/auth/registration/{backend}/'.format(backend=backend) 

    @patch('authentication.views.RegistrationView._get_user_by_backend') 
    @patch('authentication.views.RegistrationView._set_base_context') 
    def test_invalid_form(self, mock_legacy_uid, mock_base_context, invalid_form_data): 
     """ Should include invalid fields in context and serve error message """ 
     mock_legacy_uid.return_value = 12348 
     mock_base_context.return_value = {} 
     self.response = self.client.post(self.route, invalid_form_data) 

class FacebookRegistrationTestCases(BaseRegistrationTestCases): 
    def setUp(self): 
     super(FacebookRegistrationTestCases, self).setUp('facebook') 

    def test_invalid_form(self): 
     invalid_form_data = {form_field: "" for form_field in self.form_fields} 
     super(FacebookRegistrationTestCases, self).test_invalid_form(invalid_form_data=invalid_form_data) 

     for field in self.form_fields: 
      invalid_key = field + '_invalid' 
      self.assertEqual(self.response.context[invalid_key], 1) 

的測試失敗,錯誤如下:

====================================================================== 
ERROR: test_invalid_form (authentication.tests.BaseRegistrationTestCases) 
Should include invalid fields in context and serve error message 
---------------------------------------------------------------------- 
TypeError: setUp() takes exactly 2 arguments (1 given) 

任何幫助非常感謝!

回答

1

您在BaseRegistrationTestCases中的setUp()方法需要傳遞兩個參數。這就是爲什麼你有錯誤,只有'自我'被傳遞。

但是,您不能像這樣直接將其他參數backend傳遞到setUp()!正如你所看到的,它擴展了TestCases,所以你將不得不覆蓋類__init__以使這個額外的參數正確工作。