编程语言
首页 > 编程语言> > Python mockito – 模拟正在从可测试函数实例化的类

Python mockito – 模拟正在从可测试函数实例化的类

作者:互联网

在为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)

在这里,如果您看到我已经模拟了来自testable函数的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).您希望将该“调用”的返回值存根以返回UserAdapter_mock.

您可以将此存根,就像在模块中存根函数一样.你缺少的那条线是:

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,unit-testing,mocking,mockito,stubbing
来源: https://codeday.me/bug/20190703/1365677.html