2013-04-16 2 views
5

Я пишу тесты для приложения Django и использовать атрибут в моем тестовом классе для хранения его просмотра, как предполагается, тестирование, как это:Вызов функции внешней без отправки «я» Арг

# IN TESTS.PY 
class OrderTests(TestCase, ShopTest): 
    _VIEW = views.order 

    def test_gateway_answer(self): 
     url = 'whatever url' 
     request = self.request_factory(url, 'GET') 
     self._VIEW(request, **{'sku': order.sku}) 


# IN VIEWS.PY 
def order(request, sku) 
    ... 

Мои думаю, проблема в том, что проблема возникает потому, что, поскольку я вызываю атрибут класса OrderTests, python предполагает, что я хочу отправить self, а затем order получить неправильные аргументы. Легко решить ... просто не использовать его как атрибут класса, но мне было интересно, есть ли способ сказать python не отправлять себя в этом случае.

Спасибо.

+0

Заметим, что то, что у вас есть метод экземпляра, а не метод класса. Это важное различие, понимание которого поможет вам решить вашу проблему. –

ответ

9

Это происходит потому, что в функциях Python есть descriptors, поэтому, когда они обращаются к экземплярам класса, они связывают свой первый (предполагаемый self) параметр с экземпляром.

Вы можете получить доступ к _VIEW на классе, а не на экземпляре:

class OrderTests(TestCase, ShopTest): 
    _VIEW = views.order 

    def test_gateway_answer(self): 
     url = 'whatever url' 
     request = self.request_factory(url, 'GET') 
     OrderTests._VIEW(request, **{'sku': order.sku}) 

В качестве альтернативы, вы можете обернуть его в staticmethod, чтобы предотвратить его привязки к экземпляру:

class OrderTests(TestCase, ShopTest): 
    _VIEW = staticmethod(views.order) 

    def test_gateway_answer(self): 
     url = 'whatever url' 
     request = self.request_factory(url, 'GET') 
     self._VIEW(request, **{'sku': order.sku}) 
+0

Прохладный! Я знал о '@ staticmethod', но не знал, что его можно использовать как функцию (которая была немой, теперь, когда я думаю об этом, но эй ...) Большое вам спасибо! – Gabe

Смежные вопросы