我正在为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})