我很难理解这段代码。 我知道我们正在使用一些模拟而不是API端点来节省测试时间。
我不理解的是classmethod(lambda cls:self.preapproval)结构。 如果在我不在所有cl中使用的代码中使用lambda cls有什么意义呢。
我希望我足够清楚,如果有人能对这一点有所了解,我会很高兴。
非常感谢。
@patch("paypaladaptive.api.endpoints.UrlRequest",
MockUrlRequestPreapproval)
def test_preapproval(self):
# I don't understand this code, it is very confusing. Why do I need to use a lambda structure if in the code itself I don't use cls (self.preapproval)
MockUrlRequestPreapproval.preapproval = (
classmethod(lambda cls: self.preapproval))
self.assertTrue(self.preapproval.process())
self.preapproval = Preapproval.objects.get(pk=self.preapproval.pk)
self.assertNotEqual(self.preapproval.preapproval_key, "")
self.assertEqual(self.preapproval.status, "created")
答案 0 :(得分:1)
classmethod
的第一个参数需要是一个带有一个或多个参数的函数。调用任何一个都会导致错误:
classmethod(self.preapproval) # Not a function
classmethod(lambda: self.preapproval) # Needs one argument
这很有效,但它太冗长了:
def get_preapproval(cls):
return self.preapproval
classmethod(get_preapproval)
这就是代码使用lambda的原因。
可能会有所改善:
classmethod(lambda _: self.preapproval)
这显然不需要参数。
答案 1 :(得分:0)
cls
只是lambda的参数名称!而你根本不使用它! lambda cls: self.preapproval)
为classmethod
生成一个函数对象! ,当lambda产生一个函数对象时,你需要将它用于传递self.preapproval
,因为classmethod
的第一个参数需要是一个函数对象!