gpt4 book ai didi

Python mockito - 模拟一个从可测试函数实例化的类

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:19 24 4
gpt4 key购买 nike

在为 UserCompanyRateLimitValidation 类编写测试用例时,我有点迷茫。我发现很难模拟从此类内部实例化的类。

class UserCompanyRateLimitValidation:
def __init__(self, user_public_key):
self.adapter = UserAdapter(user_public_key)
container = self.adapter.get_user_company_rate_limit()
super(UserCompanyRateLimitValidation, self).__init__(container,\
UserCompanyRateLimitValidation.TYPE)

我必须测试这门课。我写过这样的测试用例。我试图模拟 UserAdapter 类,但我无法完全做到这一点。

def test_case_1():
self.user_public_key = 'TEST_USER_PUBLIC_KEY_XXXXXX1234567890XXXXX'
UserAdapter_mock = mock(UserAdapter)
when(UserAdapter_mock).get_user_company_rate_limit().\
thenReturn(get_fake_container_object())

self.test_obj = UserCompanyRateLimitValidation(self.user_public_key)

在这里,如果您看到我已经从可测试函数模拟了 get_user_company_rate_limit() 调用,container = self.adapter.get_user_company_rate_limit() 但我仍然无法弄清楚我可以模拟这个电话的方式,

 self.adapter = UserAdapter(user_public_key)

最佳答案

如果你知道诀窍,这很简单。

在 Python 中创建对象非常类似于对类对象的函数调用。 UserCompanyRateLimitValidation 正在“调用”UserAdapter(user_public_key)。您想要 stub 该“调用”的返回值以返回 UserAdapter_mock

您可以像对模块中的函数进行 stub 一样对它进行 stub 。您缺少的行是:

when(module_declaring_UserAdapter)\
.UserAdapter(self.user_public_key)\
.thenReturn(UserAdapter_mock)

之后,调用 module_declaring_UserAdapter.UserAdapter(self.user_public_key) 将返回 UserAdapter_mock

这是手册中部分的链接:https://code.google.com/p/mockito-python/wiki/Stubbing#Modules

由于 from ... import ... 语句的工作方式,您必须谨慎选择正确的 module_declaring_UserAdapter。从您的代码中,我会说您必须选择声明了 UserCompanyRateLimitValidation 的模块。

关于Python mockito - 模拟一个从可测试函数实例化的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22064120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com