我正在为 Django 应用程序编写测试,并在我的测试类上使用一个属性来存储它应该测试的 View ,如下所示:
# 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 不要发送 self。
谢谢。
最佳答案
发生这种情况是因为在 Python 中函数是 descriptors ,所以当它们在类实例上被访问时,它们将它们的第一个(假定的 self
)参数绑定(bind)到实例。
您可以在类上访问 _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
中防止它被绑定(bind)到实例:
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})
关于python - 调用外部函数而不发送 'self' arg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16039459/